internal static byte[] ToSubjectPublicKeyInfo(this DSAParameters parameters) { // SubjectPublicKeyInfo::= SEQUENCE { // algorithm AlgorithmIdentifier, // subjectPublicKey BIT STRING } // Dss-Parms ::= SEQUENCE { // p INTEGER, // q INTEGER, // g INTEGER // } return(DerEncoder.ConstructSequence( DerEncoder.ConstructSegmentedSequence( DerEncoder.SegmentedEncodeOid(s_idDsa), DerEncoder.ConstructSegmentedSequence( DerEncoder.SegmentedEncodeUnsignedInteger(parameters.P), DerEncoder.SegmentedEncodeUnsignedInteger(parameters.Q), DerEncoder.SegmentedEncodeUnsignedInteger(parameters.G) ) ), DerEncoder.SegmentedEncodeBitString( DerEncoder.SegmentedEncodeUnsignedInteger(parameters.Y)) )); }
internal static byte[] ToPrivateKeyBlob(this ECParameters parameters) { parameters.Validate(); if (!parameters.Curve.IsNamed) { throw new PlatformNotSupportedException(SR.Cryptography_ECC_NamedCurvesOnly); } byte[] pointBlob = GetPointBlob(ref parameters); // ECPrivateKey{CURVES:IOSet} ::= SEQUENCE { // version INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1), // privateKey OCTET STRING, // parameters [0] Parameters{{IOSet}} OPTIONAL, // publicKey [1] BIT STRING OPTIONAL // } return(DerEncoder.ConstructSequence( s_encodedVersion1, DerEncoder.SegmentedEncodeOctetString(parameters.D), DerEncoder.ConstructSegmentedContextSpecificValue( 0, DerEncoder.SegmentedEncodeOid(parameters.Curve.Oid)), DerEncoder.ConstructSegmentedContextSpecificValue( 1, DerEncoder.SegmentedEncodeBitString(pointBlob)))); }
internal static byte[] ToSubjectPublicKeyInfo(this RSAParameters parameters) { Debug.Assert(parameters.D == null); // SubjectPublicKeyInfo::= SEQUENCE { // algorithm AlgorithmIdentifier, // subjectPublicKey BIT STRING } return(DerEncoder.ConstructSequence( s_encodedRsaAlgorithmIdentifier, DerEncoder.SegmentedEncodeBitString( parameters.ToPkcs1Blob()))); }
internal static byte[] ToSubjectPublicKeyInfo(this ECParameters parameters) { parameters.Validate(); if (!parameters.Curve.IsNamed) { throw new PlatformNotSupportedException(SR.Cryptography_ECC_NamedCurvesOnly); } byte[] pointBlob = GetPointBlob(ref parameters); return(DerEncoder.ConstructSequence( DerEncoder.ConstructSegmentedSequence( s_encodedIdEcPublicKey, DerEncoder.SegmentedEncodeOid(parameters.Curve.Oid)), DerEncoder.SegmentedEncodeBitString(pointBlob))); }