public override int Encode() { int len = 0; // modulus needs an extra byte at the beginning to signify it's a positive value - so will be 257 bytes long instead of 256 len += modulus.Encode(); len += exponent.Encode(); byte[] lengthBytes = EncodeLength(len); derValue = new byte[1 + lengthBytes.Length + len]; derValue[0] = 0x30; int pos = 1; Array.Copy(lengthBytes, 0, derValue, pos, lengthBytes.Length); pos += lengthBytes.Length; Array.Copy(modulus.derValue, 0, derValue, pos, modulus.derValue.Length); pos += modulus.derValue.Length; Array.Copy(exponent.derValue, 0, derValue, pos, exponent.derValue.Length); pos += exponent.derValue.Length; PrependContextTag(); return(derValue.Length); }
public override int Encode() { int len = 0; len += version.Encode(); len += modulus.Encode(); len += exponent.Encode(); len += privateExponent.Encode(); len += prime1.Encode(); len += prime2.Encode(); len += exp1.Encode(); len += exp2.Encode(); len += coefficient.Encode(); byte[] lengthBytes = EncodeLength(len); derValue = new byte[1 + lengthBytes.Length + len]; derValue[0] = 0x30; int d = 1; Array.Copy(lengthBytes, 0, derValue, d, lengthBytes.Length); d += lengthBytes.Length; Array.Copy(version.derValue, 0, derValue, d, version.derValue.Length); d += version.derValue.Length; Array.Copy(modulus.derValue, 0, derValue, d, modulus.derValue.Length); d += modulus.derValue.Length; Array.Copy(exponent.derValue, 0, derValue, d, exponent.derValue.Length); d += exponent.derValue.Length; Array.Copy(privateExponent.derValue, 0, derValue, d, privateExponent.derValue.Length); d += privateExponent.derValue.Length; Array.Copy(prime1.derValue, 0, derValue, d, prime1.derValue.Length); d += prime1.derValue.Length; Array.Copy(prime2.derValue, 0, derValue, d, prime2.derValue.Length); d += prime2.derValue.Length; Array.Copy(exp1.derValue, 0, derValue, d, exp1.derValue.Length); d += exp1.derValue.Length; Array.Copy(exp2.derValue, 0, derValue, d, exp2.derValue.Length); d += exp2.derValue.Length; Array.Copy(coefficient.derValue, 0, derValue, d, coefficient.derValue.Length); d += coefficient.derValue.Length; PrependContextTag(); return(derValue.Length); }
public override int Encode() { int length = 0; int extensionsLength = 0; byte[] extensionsLengthBytes = null; int versionLength = version.Encode(); byte[] versionLengthBytes = EncodeLength(versionLength); length += 1 + versionLengthBytes.Length; length += versionLength; length += serialNumber.Encode(); length += signature.Encode(); length += issuer.Encode(); length += validity.Encode(); length += subject.Encode(); length += subjectPKInfo.Encode(); // optional if (issuerUniqueID != null) { length += 1 + issuerUniqueID.Encode(); } if (subjectUniqueID != null) { length += 1 + subjectUniqueID.Encode(); } if (extensions != null) { extensionsLength = extensions.Encode(); extensionsLengthBytes = EncodeLength(extensionsLength); length += 1 + extensionsLengthBytes.Length + extensionsLength; } byte[] lengthBytes = EncodeLength(length); derValue = new byte[1 + lengthBytes.Length + length]; int d = 0; derValue[d] = 0x30; // sequence d++; Array.Copy(lengthBytes, 0, derValue, d, lengthBytes.Length); d += lengthBytes.Length; derValue[d] = 0xa0; // explicit tag d++; Array.Copy(versionLengthBytes, 0, derValue, d, versionLengthBytes.Length); d += versionLengthBytes.Length; Array.Copy(version.derValue, 0, derValue, d, version.derValue.Length); d += version.derValue.Length; Array.Copy(serialNumber.derValue, 0, derValue, d, serialNumber.derValue.Length); d += serialNumber.derValue.Length; Array.Copy(signature.derValue, 0, derValue, d, signature.derValue.Length); d += signature.derValue.Length; Array.Copy(issuer.derValue, 0, derValue, d, issuer.derValue.Length); d += issuer.derValue.Length; Array.Copy(validity.derValue, 0, derValue, d, validity.derValue.Length); d += validity.derValue.Length; Array.Copy(subject.derValue, 0, derValue, d, subject.derValue.Length); d += subject.derValue.Length; Array.Copy(subjectPKInfo.derValue, 0, derValue, d, subjectPKInfo.derValue.Length); d += subjectPKInfo.derValue.Length; if (issuerUniqueID != null) { derValue[d] = 0xa1; d++; Array.Copy(issuerUniqueID.derValue, 0, derValue, d, issuerUniqueID.derValue.Length); d += issuerUniqueID.derValue.Length; } if (subjectUniqueID != null) { derValue[d] = 0xa2; d++; Array.Copy(subjectUniqueID.derValue, 0, derValue, d, subjectUniqueID.derValue.Length); d += subjectUniqueID.derValue.Length; } if (extensions != null) { derValue[d] = 0xa3; d++; Array.Copy(extensionsLengthBytes, 0, derValue, d, extensionsLengthBytes.Length); d += extensionsLengthBytes.Length; Array.Copy(extensions.derValue, 0, derValue, d, extensions.derValue.Length); d += extensions.derValue.Length; } PrependContextTag(); return(derValue.Length); }