public override PACSAMKeyRecord Clone(bool includeKey = false) { PACSAMPlaidKeyRecord instance = new PACSAMPlaidKeyRecord(); CopyTo(instance, includeKey); return(instance); }
public override void ExportParts(params PACSAMKeyRecord[] parts) { // There must be at least 3 or more parts if (parts.Length < 3) { throw new ArgumentException(@"ExportParts: There must be at 3 or more parts to export to!"); } // Create part 0 parts[0] = new PACSAMPlaidKeyRecord(this); // Iterate through the parts from 1 to n (skipping the first, which will hold the XOR result) for (int i = 1; i < parts.Length; i++) { // Generate the part parts[i] = new PACSAMPlaidKeyRecord(this); var pI = (parts[i] as PACSAMPlaidKeyRecord); var p0 = (parts[0] as PACSAMPlaidKeyRecord); pI.IAKey.P = Crypto.CreateRandomEntropy(IAKey.P.Length); p0.IAKey.P = Crypto.XorArray(p0.IAKey.P, pI.IAKey.P); pI.IAKey.Q = Crypto.CreateRandomEntropy(IAKey.Q.Length); p0.IAKey.Q = Crypto.XorArray(p0.IAKey.Q, pI.IAKey.Q); pI.IAKey.PQ = Crypto.CreateRandomEntropy(IAKey.PQ.Length); p0.IAKey.PQ = Crypto.XorArray(p0.IAKey.PQ, pI.IAKey.PQ); pI.IAKey.DP = Crypto.CreateRandomEntropy(IAKey.DP.Length); p0.IAKey.DP = Crypto.XorArray(p0.IAKey.DP, pI.IAKey.DP); pI.IAKey.DQ = Crypto.CreateRandomEntropy(IAKey.DQ.Length); p0.IAKey.DQ = Crypto.XorArray(p0.IAKey.DQ, pI.IAKey.DQ); pI.IAKey.D = Crypto.CreateRandomEntropy(IAKey.D.Length); p0.IAKey.D = Crypto.XorArray(p0.IAKey.D, pI.IAKey.D); pI.IAKey.Modulus = Crypto.CreateRandomEntropy(IAKey.Modulus.Length); p0.IAKey.Modulus = Crypto.XorArray(p0.IAKey.Modulus, pI.IAKey.Modulus); pI.IAKey.Exponent = Crypto.CreateRandomEntropy(IAKey.Exponent.Length); p0.IAKey.Exponent = Crypto.XorArray(p0.IAKey.Exponent, pI.IAKey.Exponent); pI.FAKey = Crypto.CreateRandomEntropy(FAKey.Length); p0.FAKey = Crypto.XorArray(p0.FAKey, pI.FAKey); } }
public PACSAMPlaidKeyRecord(PACSAMPlaidKeyRecord copyObject) { copyObject.CopyTo(this, true); }