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}