/// <summary> /// Initializes a new instance of the CkKipParams class. /// </summary> /// <param name='mechanism'>Underlying cryptographic mechanism (CKM)</param> /// <param name='key'>Handle to a key that will contribute to the entropy of the derived key (CKM_KIP_DERIVE) or will be used in the MAC operation (CKM_KIP_MAC)</param> /// <param name='seed'>Input seed</param> public CkKipParams(NativeULong?mechanism, ObjectHandle key, byte[] seed) { _lowLevelStruct.Mechanism = IntPtr.Zero; _lowLevelStruct.Key = 0; _lowLevelStruct.Seed = IntPtr.Zero; _lowLevelStruct.SeedLen = 0; if (mechanism != null) { byte[] bytes = NativeLongUtils.ConvertToByteArray(mechanism.Value); _lowLevelStruct.Mechanism = UnmanagedMemory.Allocate(bytes.Length); UnmanagedMemory.Write(_lowLevelStruct.Mechanism, bytes); } if (key == null) { throw new ArgumentNullException("key"); } _lowLevelStruct.Key = key.ObjectId; if (seed != null) { _lowLevelStruct.Seed = UnmanagedMemory.Allocate(seed.Length); UnmanagedMemory.Write(_lowLevelStruct.Seed, seed); _lowLevelStruct.SeedLen = NativeLongUtils.ConvertFromInt32(seed.Length); } }
/// <summary> /// Initializes a new instance of the CkTlsPrfParams class. /// </summary> /// <param name='seed'>Input seed</param> /// <param name='label'>Identifying label</param> /// <param name='outputLen'>Length in bytes that the output to be created shall have</param> public CkTlsPrfParams(byte[] seed, byte[] label, NativeULong outputLen) { _lowLevelStruct.Seed = IntPtr.Zero; _lowLevelStruct.SeedLen = 0; _lowLevelStruct.Label = IntPtr.Zero; _lowLevelStruct.LabelLen = 0; _lowLevelStruct.Output = IntPtr.Zero; _lowLevelStruct.OutputLen = IntPtr.Zero; if (seed != null) { _lowLevelStruct.Seed = UnmanagedMemory.Allocate(seed.Length); UnmanagedMemory.Write(_lowLevelStruct.Seed, seed); _lowLevelStruct.SeedLen = NativeLongUtils.ConvertFromInt32(seed.Length); } if (label != null) { _lowLevelStruct.Label = UnmanagedMemory.Allocate(label.Length); UnmanagedMemory.Write(_lowLevelStruct.Label, label); _lowLevelStruct.LabelLen = NativeLongUtils.ConvertFromInt32(label.Length); } if (outputLen < 1) { throw new ArgumentException("Value has to be positive number", "outputLen"); } _lowLevelStruct.Output = UnmanagedMemory.Allocate(NativeLongUtils.ConvertToInt32(outputLen)); byte[] outputLenBytes = NativeLongUtils.ConvertToByteArray(outputLen); _lowLevelStruct.OutputLen = UnmanagedMemory.Allocate(outputLenBytes.Length); UnmanagedMemory.Write(_lowLevelStruct.OutputLen, outputLenBytes); }
/// <summary> /// Initializes a new instance of the CkCmsSigParams class. /// </summary> /// <param name='certificateHandle'>Object handle for a certificate associated with the signing key</param> /// <param name='signingMechanism'>Mechanism to use when signing a constructed CMS SignedAttributes value</param> /// <param name='digestMechanism'>Mechanism to use when digesting the data</param> /// <param name='contentType'>String indicating complete MIME Content-type of message to be signed or null if the message is a MIME object</param> /// <param name='requestedAttributes'>DER-encoded list of CMS Attributes the caller requests to be included in the signed attributes</param> /// <param name='requiredAttributes'>DER-encoded list of CMS Attributes (with accompanying values) required to be included in the resulting signed attributes</param> public CkCmsSigParams(ObjectHandle certificateHandle, NativeULong?signingMechanism, NativeULong?digestMechanism, string contentType, byte[] requestedAttributes, byte[] requiredAttributes) { _lowLevelStruct.CertificateHandle = CK.CK_INVALID_HANDLE; _lowLevelStruct.SigningMechanism = IntPtr.Zero; _lowLevelStruct.DigestMechanism = IntPtr.Zero; _lowLevelStruct.ContentType = IntPtr.Zero; _lowLevelStruct.RequestedAttributes = IntPtr.Zero; _lowLevelStruct.RequestedAttributesLen = 0; _lowLevelStruct.RequiredAttributes = IntPtr.Zero; _lowLevelStruct.RequiredAttributesLen = 0; if (certificateHandle == null) { throw new ArgumentNullException("certificateHandle"); } _lowLevelStruct.CertificateHandle = certificateHandle.ObjectId; if (signingMechanism != null) { byte[] bytes = NativeLongUtils.ConvertToByteArray(signingMechanism.Value); _lowLevelStruct.SigningMechanism = UnmanagedMemory.Allocate(bytes.Length); UnmanagedMemory.Write(_lowLevelStruct.SigningMechanism, bytes); } if (digestMechanism != null) { byte[] bytes = NativeLongUtils.ConvertToByteArray(digestMechanism.Value); _lowLevelStruct.DigestMechanism = UnmanagedMemory.Allocate(bytes.Length); UnmanagedMemory.Write(_lowLevelStruct.DigestMechanism, bytes); } if (contentType != null) { byte[] bytes = ConvertUtils.Utf8StringToBytes(contentType); Array.Resize(ref bytes, bytes.Length + 1); bytes[bytes.Length - 1] = 0; _lowLevelStruct.ContentType = UnmanagedMemory.Allocate(bytes.Length); UnmanagedMemory.Write(_lowLevelStruct.ContentType, bytes); } if (requestedAttributes != null) { _lowLevelStruct.RequestedAttributes = UnmanagedMemory.Allocate(requestedAttributes.Length); UnmanagedMemory.Write(_lowLevelStruct.RequestedAttributes, requestedAttributes); _lowLevelStruct.RequestedAttributesLen = NativeLongUtils.ConvertFromInt32(requestedAttributes.Length); } if (requiredAttributes != null) { _lowLevelStruct.RequiredAttributes = UnmanagedMemory.Allocate(requiredAttributes.Length); UnmanagedMemory.Write(_lowLevelStruct.RequiredAttributes, requiredAttributes); _lowLevelStruct.RequiredAttributesLen = NativeLongUtils.ConvertFromInt32(requiredAttributes.Length); } }