All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.google.bitcoin.core.VersionedChecksummedBytes Maven / Gradle / Ivy

The newest version!
/**
 * Copyright 2011 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.google.bitcoin.core;

import java.util.Arrays;

import static com.google.common.base.Preconditions.checkArgument;

/**
 * 

In Bitcoin the following format is often used to represent some type of key:

*

*

[one version byte] [data bytes] [4 checksum bytes]
*

*

and the result is then Base58 encoded. This format is used for addresses, and private keys exported using the * dumpprivkey command.

*/ public class VersionedChecksummedBytes { protected int version; protected byte[] bytes; protected VersionedChecksummedBytes(String encoded) throws AddressFormatException { byte[] tmp = Base58.decodeChecked(encoded); version = tmp[0] & 0xFF; bytes = new byte[tmp.length - 1]; System.arraycopy(tmp, 1, bytes, 0, tmp.length - 1); } protected VersionedChecksummedBytes(int version, byte[] bytes) { checkArgument(version < 256 && version >= 0); this.version = version; this.bytes = bytes; } @Override public String toString() { // A stringified buffer is: // 1 byte version + data bytes + 4 bytes check code (a truncated hash) byte[] addressBytes = new byte[1 + bytes.length + 4]; addressBytes[0] = (byte) version; System.arraycopy(bytes, 0, addressBytes, 1, bytes.length); byte[] check = Utils.doubleDigest(addressBytes, 0, bytes.length + 1); System.arraycopy(check, 0, addressBytes, bytes.length + 1, 4); return Base58.encode(addressBytes); } @Override public int hashCode() { return Arrays.hashCode(bytes); } @Override public boolean equals(Object o) { if (!(o instanceof VersionedChecksummedBytes)) return false; VersionedChecksummedBytes vcb = (VersionedChecksummedBytes) o; return Arrays.equals(vcb.bytes, bytes); } /** * Returns the "version" or "header" byte: the first byte of the data. This is used to disambiguate what the * contents apply to, for example, which network the key or address is valid on. * * @return A positive number between 0 and 255. */ public int getVersion() { return version; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy