org.bouncycastle.asn1.eac.RSAPublicKey Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of bcutil-fips Show documentation
Show all versions of bcutil-fips Show documentation
The Bouncy Castle Java APIs for ASN.1 extension and utility APIs used to support bcpkix and bctls with the BC FIPS provider. The APIs may also be used with other providers although if being used in a FIPS context it is the responsibility of the user to ensure that any other providers used are FIPS certified and used appropriately.
/***************************************************************/
/****** DO NOT EDIT THIS CLASS bc-java SOURCE FILE ******/
/***************************************************************/
package org.bouncycastle.asn1.eac;
import java.math.BigInteger;
import java.util.Enumeration;
import org.bouncycastle.asn1.ASN1EncodableVector;
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.DERSequence;
/**
* an Iso7816RSAPublicKeyStructure structure.
*
* Certificate Holder Authorization ::= SEQUENCE {
* // modulus should be at least 1024bit and a multiple of 512.
* DERTaggedObject modulus,
* // access rights exponent
* DERTaggedObject accessRights,
* }
*
*/
public class RSAPublicKey
extends PublicKeyDataObject
{
private ASN1ObjectIdentifier usage;
private BigInteger modulus;
private BigInteger exponent;
private int valid = 0;
private static int modulusValid = 0x01;
private static int exponentValid = 0x02;
RSAPublicKey(ASN1Sequence seq)
{
Enumeration en = seq.getObjects();
this.usage = ASN1ObjectIdentifier.getInstance(en.nextElement());
while (en.hasMoreElements())
{
UnsignedInteger val = UnsignedInteger.getInstance(en.nextElement());
switch (val.getTagNo())
{
case 0x1:
setModulus(val);
break;
case 0x2:
setExponent(val);
break;
default:
throw new IllegalArgumentException("Unknown DERTaggedObject :" + val.getTagNo() + "-> not an Iso7816RSAPublicKeyStructure");
}
}
if (valid != 0x3)
{
throw new IllegalArgumentException("missing argument -> not an Iso7816RSAPublicKeyStructure");
}
}
public RSAPublicKey(ASN1ObjectIdentifier usage, BigInteger modulus, BigInteger exponent)
{
this.usage = usage;
this.modulus = modulus;
this.exponent = exponent;
}
public ASN1ObjectIdentifier getUsage()
{
return usage;
}
public BigInteger getModulus()
{
return modulus;
}
public BigInteger getPublicExponent()
{
return exponent;
}
private void setModulus(UnsignedInteger modulus)
{
if ((valid & modulusValid) == 0)
{
valid |= modulusValid;
this.modulus = modulus.getValue();
}
else
{
throw new IllegalArgumentException("Modulus already set");
}
}
private void setExponent(UnsignedInteger exponent)
{
if ((valid & exponentValid) == 0)
{
valid |= exponentValid;
this.exponent = exponent.getValue();
}
else
{
throw new IllegalArgumentException("Exponent already set");
}
}
public ASN1Primitive toASN1Primitive()
{
ASN1EncodableVector v = new ASN1EncodableVector();
v.add(usage);
v.add(new UnsignedInteger(0x01, getModulus()));
v.add(new UnsignedInteger(0x02, getPublicExponent()));
return new DERSequence(v);
}
}