Bouncy Castle Cryptography Library 1.86

org.bouncycastle.asn1.x509
Class AlgorithmIdentifier

java.lang.Object
  extended byorg.bouncycastle.asn1.ASN1Object
      extended byorg.bouncycastle.asn1.x509.AlgorithmIdentifier
All Implemented Interfaces:
ASN1Encodable, Encodable

public class AlgorithmIdentifier
extends ASN1Object


Constructor Summary
AlgorithmIdentifier(ASN1ObjectIdentifier algorithm)
           
AlgorithmIdentifier(ASN1ObjectIdentifier algorithm, ASN1Encodable parameters)
           
 
Method Summary
static boolean areEquivalent(AlgorithmIdentifier a, AlgorithmIdentifier b)
          Return true if two algorithm identifiers name the same algorithm carrying the same parameters, counting an absent parameters field and an explicit as the same thing - both say "this algorithm takes no parameters", they simply say it differently.
 ASN1ObjectIdentifier getAlgorithm()
           
static AlgorithmIdentifier getInstance(ASN1TaggedObject taggedObject, boolean declaredExplicit)
           
static AlgorithmIdentifier getInstance(java.lang.Object obj)
           
 ASN1Encodable getParameters()
           
static AlgorithmIdentifier getTagged(ASN1TaggedObject taggedObject, boolean declaredExplicit)
           
 ASN1Primitive toASN1Primitive()
          Produce an object suitable for an ASN1OutputStream.
 
Methods inherited from class org.bouncycastle.asn1.ASN1Object
encodeTo, encodeTo, equals, getEncoded, getEncoded, hasEncodedTagValue, hashCode
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

AlgorithmIdentifier

public AlgorithmIdentifier(ASN1ObjectIdentifier algorithm)

AlgorithmIdentifier

public AlgorithmIdentifier(ASN1ObjectIdentifier algorithm,
                           ASN1Encodable parameters)
Method Detail

getInstance

public static AlgorithmIdentifier getInstance(java.lang.Object obj)

getInstance

public static AlgorithmIdentifier getInstance(ASN1TaggedObject taggedObject,
                                              boolean declaredExplicit)

getTagged

public static AlgorithmIdentifier getTagged(ASN1TaggedObject taggedObject,
                                            boolean declaredExplicit)

getAlgorithm

public ASN1ObjectIdentifier getAlgorithm()

getParameters

public ASN1Encodable getParameters()

areEquivalent

public static boolean areEquivalent(AlgorithmIdentifier a,
                                    AlgorithmIdentifier b)
Return true if two algorithm identifiers name the same algorithm carrying the same parameters, counting an absent parameters field and an explicit as the same thing - both say "this algorithm takes no parameters", they simply say it differently.

The two encodings are both in wide use for the SHA-2 digests, and RFC 5754 sec. 2 requires a receiver to take either: "Implementations MUST accept SHA2 AlgorithmIdentifiers with absent parameters. Implementations MUST accept SHA2 AlgorithmIdentifiers with NULL parameters." - while requiring that they be generated with the parameters absent. ASN1Object.equals(Object) compares the encodings and so separates them, which is right for a map key but wrong for deciding whether a peer named the algorithm we expected.

Note this only equates absent with ; an identifier carrying an actual parameter structure is never equivalent to one carrying none.

Parameters:
a - an algorithm identifier, may be null.
b - an algorithm identifier, may be null.
Returns:
true if the two name the same algorithm with the same parameters.

toASN1Primitive

public ASN1Primitive toASN1Primitive()
Produce an object suitable for an ASN1OutputStream. AlgorithmIdentifier ::= SEQUENCE { algorithm OBJECT IDENTIFIER, parameters ANY DEFINED BY algorithm OPTIONAL }

Specified by:
toASN1Primitive in interface ASN1Encodable
Specified by:
toASN1Primitive in class ASN1Object
Returns:
a primitive representation of this object.

Bouncy Castle Cryptography Library 1.86