All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.bouncycastle.asn1.cmp.Challenge Maven / Gradle / Ivy

Go to download

The Bouncy Castle Java APIs for ASN.1 extension and utility APIs used to support bcpkix and bctls. This jar contains APIs for JDK 1.8 and up.

There is a newer version: 1.78.1
Show newest version
package org.bouncycastle.asn1.cmp;

import org.bouncycastle.asn1.ASN1Encodable;
import org.bouncycastle.asn1.ASN1EncodableVector;
import org.bouncycastle.asn1.ASN1Integer;
import org.bouncycastle.asn1.ASN1Object;
import org.bouncycastle.asn1.ASN1OctetString;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.DEROctetString;
import org.bouncycastle.asn1.DERSequence;
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
import org.bouncycastle.asn1.x509.GeneralName;

/**
 * 
 * Challenge ::= SEQUENCE {
 *          owf                 AlgorithmIdentifier  OPTIONAL,
 *
 *          -- MUST be present in the first Challenge; MAY be omitted in
 *          -- any subsequent Challenge in POPODecKeyChallContent (if
 *          -- omitted, then the owf used in the immediately preceding
 *          -- Challenge is to be used).
 *
 *          witness             OCTET STRING,
 *          -- the result of applying the one-way function (owf) to a
 *          -- randomly-generated INTEGER, A.  [Note that a different
 *          -- INTEGER MUST be used for each Challenge.]
 *          challenge           OCTET STRING
 *          -- the encryption (under the public key for which the cert.
 *          -- request is being made) of Rand, where Rand is specified as
 *          --   Rand ::= SEQUENCE {
 *          --      int      INTEGER,
 *          --       - the randomly-generated INTEGER A (above)
 *          --      sender   GeneralName
 *          --       - the sender's name (as included in PKIHeader)
 *          --   }
 *      }
 *      
*/ public class Challenge extends ASN1Object { private AlgorithmIdentifier owf; private final ASN1OctetString witness; private final ASN1OctetString challenge; private Challenge(ASN1Sequence seq) { int index = 0; if (seq.size() == 3) { owf = AlgorithmIdentifier.getInstance(seq.getObjectAt(index++)); } witness = ASN1OctetString.getInstance(seq.getObjectAt(index++)); challenge = ASN1OctetString.getInstance(seq.getObjectAt(index)); } public Challenge(byte[] witness, byte[] challenge) { this(null, witness, challenge); } public Challenge(AlgorithmIdentifier owf, byte[] witness, byte[] challenge) { this.owf = owf; this.witness = new DEROctetString(witness); this.challenge = new DEROctetString(challenge); } public static Challenge getInstance(Object o) { if (o instanceof Challenge) { return (Challenge)o; } if (o != null) { return new Challenge(ASN1Sequence.getInstance(o)); } return null; } public AlgorithmIdentifier getOwf() { return owf; } public byte[] getWitness() { return witness.getOctets(); } public byte[] getChallenge() { return challenge.getOctets(); } /** *
     * Challenge ::= SEQUENCE {
     *                 owf                 AlgorithmIdentifier  OPTIONAL,
     *
     *                 -- MUST be present in the first Challenge; MAY be omitted in
     *                 -- any subsequent Challenge in POPODecKeyChallContent (if
     *                 -- omitted, then the owf used in the immediately preceding
     *                 -- Challenge is to be used).
     *
     *                 witness             OCTET STRING,
     *                 -- the result of applying the one-way function (owf) to a
     *                 -- randomly-generated INTEGER, A.  [Note that a different
     *                 -- INTEGER MUST be used for each Challenge.]
     *                 challenge           OCTET STRING
     *                 -- the encryption (under the public key for which the cert.
     *                 -- request is being made) of Rand, where Rand is specified as
     *                 --   Rand ::= SEQUENCE {
     *                 --      int      INTEGER,
     *                 --       - the randomly-generated INTEGER A (above)
     *                 --      sender   GeneralName
     *                 --       - the sender's name (as included in PKIHeader)
     *                 --   }
     *      }
     * 
* * @return a basic ASN.1 object representation. */ public ASN1Primitive toASN1Primitive() { ASN1EncodableVector v = new ASN1EncodableVector(3); addOptional(v, owf); v.add(witness); v.add(challenge); return new DERSequence(v); } private void addOptional(ASN1EncodableVector v, ASN1Encodable obj) { if (obj != null) { v.add(obj); } } /** * Rand is the inner type */ public static class Rand extends ASN1Object { private final ASN1Integer _int; private final GeneralName sender; public Rand(ASN1Integer _int, GeneralName sender) { this._int = _int; this.sender = sender; } public Rand(ASN1Sequence seq) { if (seq.size() != 2) { throw new IllegalArgumentException("expected sequence size of 2"); } this._int = ASN1Integer.getInstance(seq.getObjectAt(0)); this.sender = GeneralName.getInstance(seq.getObjectAt(1)); } public static Rand getInstance(Object o) { if (o instanceof Rand) { return (Rand)o; } if (o != null) { return new Rand(ASN1Sequence.getInstance(o)); } return null; } public ASN1Integer getInt() { return _int; } public GeneralName getSender() { return sender; } public ASN1Primitive toASN1Primitive() { return new DERSequence(new ASN1Encodable[]{_int, sender}); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy