001package org.apache.commons.ssl.org.bouncycastle.asn1.mozilla;
002
003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object;
004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive;
005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence;
006import org.apache.commons.ssl.org.bouncycastle.asn1.DERIA5String;
007import org.apache.commons.ssl.org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
008
009/**
010 * This is designed to parse
011 * the PublicKeyAndChallenge created by the KEYGEN tag included by
012 * Mozilla based browsers.
013 *  <pre>
014 *  PublicKeyAndChallenge ::= SEQUENCE {
015 *    spki SubjectPublicKeyInfo,
016 *    challenge IA5STRING
017 *  }
018 *
019 *  </pre>
020 */
021public class PublicKeyAndChallenge
022    extends ASN1Object
023{
024    private ASN1Sequence         pkacSeq;
025    private SubjectPublicKeyInfo spki;
026    private DERIA5String         challenge;
027
028    public static PublicKeyAndChallenge getInstance(Object obj)
029    {
030        if (obj instanceof PublicKeyAndChallenge)
031        {
032            return (PublicKeyAndChallenge)obj;
033        }
034        else if (obj != null)
035        {
036            return new PublicKeyAndChallenge(ASN1Sequence.getInstance(obj));
037        }
038
039        return null;
040    }
041
042    private PublicKeyAndChallenge(ASN1Sequence seq)
043    {
044        pkacSeq = seq;
045        spki = SubjectPublicKeyInfo.getInstance(seq.getObjectAt(0));
046        challenge = DERIA5String.getInstance(seq.getObjectAt(1));
047    }
048
049    public ASN1Primitive toASN1Primitive()
050    {
051        return pkacSeq;
052    }
053
054    public SubjectPublicKeyInfo getSubjectPublicKeyInfo()
055    {
056        return spki;
057    }
058
059    public DERIA5String getChallenge()
060    {
061        return challenge;
062    }
063}