001package org.apache.commons.ssl.org.bouncycastle.asn1.x509.qualified;
002
003import java.util.Enumeration;
004
005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector;
006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object;
007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1OctetString;
008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive;
009import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence;
010import org.apache.commons.ssl.org.bouncycastle.asn1.DERIA5String;
011import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence;
012import org.apache.commons.ssl.org.bouncycastle.asn1.x509.AlgorithmIdentifier;
013
014/**
015 * The BiometricData object.
016 * <pre>
017 * BiometricData  ::=  SEQUENCE {
018 *       typeOfBiometricData  TypeOfBiometricData,
019 *       hashAlgorithm        AlgorithmIdentifier,
020 *       biometricDataHash    OCTET STRING,
021 *       sourceDataUri        IA5String OPTIONAL  }
022 * </pre>
023 */
024public class BiometricData 
025    extends ASN1Object
026{
027    private TypeOfBiometricData typeOfBiometricData;
028    private AlgorithmIdentifier hashAlgorithm;
029    private ASN1OctetString     biometricDataHash;
030    private DERIA5String        sourceDataUri;
031    
032    public static BiometricData getInstance(
033        Object obj)
034    {
035        if (obj instanceof BiometricData)
036        {
037            return (BiometricData)obj;
038        }
039
040        if (obj != null)
041        {
042            return new BiometricData(ASN1Sequence.getInstance(obj));            
043        }
044
045        return null;
046    }                
047            
048    private BiometricData(ASN1Sequence seq)
049    {
050        Enumeration e = seq.getObjects();
051
052        // typeOfBiometricData
053        typeOfBiometricData = TypeOfBiometricData.getInstance(e.nextElement());
054        // hashAlgorithm
055        hashAlgorithm = AlgorithmIdentifier.getInstance(e.nextElement());
056        // biometricDataHash
057        biometricDataHash = ASN1OctetString.getInstance(e.nextElement());
058        // sourceDataUri
059        if (e.hasMoreElements())
060        {
061            sourceDataUri = DERIA5String.getInstance(e.nextElement());
062        }
063    }
064    
065    public BiometricData(
066        TypeOfBiometricData typeOfBiometricData,
067        AlgorithmIdentifier hashAlgorithm,
068        ASN1OctetString     biometricDataHash,
069        DERIA5String        sourceDataUri)
070    {
071        this.typeOfBiometricData = typeOfBiometricData;
072        this.hashAlgorithm = hashAlgorithm;
073        this.biometricDataHash = biometricDataHash;
074        this.sourceDataUri = sourceDataUri;
075    }
076    
077    public BiometricData(
078        TypeOfBiometricData typeOfBiometricData,
079        AlgorithmIdentifier hashAlgorithm,
080        ASN1OctetString     biometricDataHash)
081    {
082        this.typeOfBiometricData = typeOfBiometricData;
083        this.hashAlgorithm = hashAlgorithm;
084        this.biometricDataHash = biometricDataHash;
085        this.sourceDataUri = null;
086    }
087
088    public TypeOfBiometricData getTypeOfBiometricData()
089    {
090        return typeOfBiometricData;
091    }
092    
093    public AlgorithmIdentifier getHashAlgorithm()
094    {
095        return hashAlgorithm;
096    }
097    
098    public ASN1OctetString getBiometricDataHash()
099    {
100        return biometricDataHash;
101    }
102    
103    public DERIA5String getSourceDataUri()
104    {
105        return sourceDataUri;
106    }
107    
108    public ASN1Primitive toASN1Primitive()
109    {
110        ASN1EncodableVector seq = new ASN1EncodableVector();
111        seq.add(typeOfBiometricData);
112        seq.add(hashAlgorithm);
113        seq.add(biometricDataHash); 
114        
115        if (sourceDataUri != null)
116        {
117            seq.add(sourceDataUri);
118        }
119
120        return new DERSequence(seq);
121    }
122}