Class JcaSha256MerkleTreeHash

  • All Implemented Interfaces:
    MerkleTreeHash

    public class JcaSha256MerkleTreeHash
    extends java.lang.Object
    implements MerkleTreeHash
    JCA-side SHA-256 implementation of MerkleTreeHash, obtained via MessageDigest.getInstance("SHA-256") through a JcaJceHelper.

    A fresh MessageDigest is created per call, so a single instance is thread-safe and can be shared (e.g. inside an MTCCertAuth or a MerkleTreeCertificateValidator.ValidationParams used by concurrent validations). The constructor fails fast if the selected provider cannot supply SHA-256.

    • Constructor Detail

      • JcaSha256MerkleTreeHash

        public JcaSha256MerkleTreeHash()
      • JcaSha256MerkleTreeHash

        public JcaSha256MerkleTreeHash​(java.lang.String providerName)
      • JcaSha256MerkleTreeHash

        public JcaSha256MerkleTreeHash​(java.security.Provider provider)
      • JcaSha256MerkleTreeHash

        public JcaSha256MerkleTreeHash​(org.bouncycastle.jcajce.util.JcaJceHelper helper)
    • Method Detail

      • getAlgorithmIdentifier

        public org.bouncycastle.asn1.x509.AlgorithmIdentifier getAlgorithmIdentifier()
        Specified by:
        getAlgorithmIdentifier in interface MerkleTreeHash
        Returns:
        the X.509 AlgorithmIdentifier that names this hash function. Used by MerkleTreeCertificateValidator to cross-check the supplied hash against the logHash field of the CA's id-pe-mtcCertificationAuthority extension.
      • getHashSize

        public int getHashSize()
        Specified by:
        getHashSize in interface MerkleTreeHash
        Returns:
        the hash output size in bytes
      • hashLeaf

        public byte[] hashLeaf​(byte[] entry)
        Description copied from interface: MerkleTreeHash
        Hash of a leaf entry: HASH(0x00 || entry).
        Specified by:
        hashLeaf in interface MerkleTreeHash
        Parameters:
        entry - the raw entry bytes
        Returns:
        leaf hash
      • hashNode

        public byte[] hashNode​(byte[] left,
                               byte[] right)
        Description copied from interface: MerkleTreeHash
        Hash of an internal node: HASH(0x01 || left || right).
        Specified by:
        hashNode in interface MerkleTreeHash
        Parameters:
        left - left child hash
        right - right child hash
        Returns:
        node hash
      • hashRaw

        public byte[] hashRaw​(byte[] data)
        Description copied from interface: MerkleTreeHash
        Raw hash with no domain separation prefix: HASH(data). Used for the subjectPublicKeyInfoHash in a TBSCertificateLogEntry (Section 5.3), which is computed with the log's hash function but without the leaf-node prefix.
        Specified by:
        hashRaw in interface MerkleTreeHash
        Parameters:
        data - the input bytes
        Returns:
        the hash output