internal static void SetCacheValue(IPropertySet containerValues, byte[] value) { byte[] encryptedValue = CryptographyHelper.Encrypt(value); containerValues[CacheValueLength] = encryptedValue.Length; if (encryptedValue == null) { containerValues[CacheValueSegmentCount] = 1; containerValues[CacheValue + 0] = null; } else { int segmentCount = (encryptedValue.Length / MaxCompositeValueLength) + ((encryptedValue.Length % MaxCompositeValueLength == 0) ? 0 : 1); byte[] subValue = new byte[MaxCompositeValueLength]; for (int i = 0; i < segmentCount - 1; i++) { Array.Copy(encryptedValue, i * MaxCompositeValueLength, subValue, 0, MaxCompositeValueLength); containerValues[CacheValue + i] = subValue; } int copiedLength = (segmentCount - 1) * MaxCompositeValueLength; Array.Copy(encryptedValue, copiedLength, subValue, 0, encryptedValue.Length - copiedLength); containerValues[CacheValue + (segmentCount - 1)] = subValue; containerValues[CacheValueSegmentCount] = segmentCount; } }
internal static byte[] GetCacheValue(IPropertySet containerValues) { if (!containerValues.ContainsKey(CacheValueLength)) { return(null); } int encyptedValueLength = (int)containerValues[CacheValueLength]; int segmentCount = (int)containerValues[CacheValueSegmentCount]; byte[] encryptedValue = new byte[encyptedValueLength]; if (segmentCount == 1) { encryptedValue = (byte[])containerValues[CacheValue + 0]; } else { for (int i = 0; i < segmentCount - 1; i++) { Array.Copy((byte[])containerValues[CacheValue + i], 0, encryptedValue, i * MaxCompositeValueLength, MaxCompositeValueLength); } } Array.Copy((byte[])containerValues[CacheValue + (segmentCount - 1)], 0, encryptedValue, (segmentCount - 1) * MaxCompositeValueLength, encyptedValueLength - (segmentCount - 1) * MaxCompositeValueLength); return(CryptographyHelper.Decrypt(encryptedValue)); }
/// <summary> /// Signs a message using the private key in the certificate /// </summary> /// <param name="message">Message that needs to be signed</param> /// <returns>Signed message as a byte array</returns> public byte[] Sign(string message) { CryptographyHelper helper = new CryptographyHelper(); return(helper.SignWithCertificate(message, this.Certificate)); }