private static ProofKeyOutput GetProofData(ProofKeyInput proofData) { if (proofData.AccessToken == null) { throw new ProofKeySigningException(nameof(proofData.AccessToken)); } // Get the final values we'll operate on string accessToken = proofData.AccessToken; string hostUrl = proofData.Url.ToUpperInvariant(); long timeStamp = proofData.Timestamp; // Encode values from headers into byte[] byte[] accessTokenBytes = Encoding.UTF8.GetBytes(accessToken); byte[] hostUrlBytes = Encoding.UTF8.GetBytes(hostUrl); byte[] timeStampBytes = EncodeNumber(timeStamp); int accessTokenLength = accessTokenBytes.Length; int hostUrlLength = hostUrlBytes.Length; int timeStampLength = timeStampBytes.Length; byte[] accessTokenLengthBytes = EncodeNumber(accessTokenLength); byte[] hostUrlLengthBytes = EncodeNumber(hostUrlLength); byte[] timeStampLengthBytes = EncodeNumber(timeStampLength); // prepare a list that will be used to combine all those arrays together List <byte> expectedProof = new List <byte>( accessTokenLengthBytes.Length + accessTokenLength + hostUrlLengthBytes.Length + hostUrlLength + timeStampLengthBytes.Length + timeStampLength); expectedProof.AddRange(accessTokenLengthBytes); expectedProof.AddRange(accessTokenBytes); expectedProof.AddRange(hostUrlLengthBytes); expectedProof.AddRange(hostUrlBytes); expectedProof.AddRange(timeStampLengthBytes); expectedProof.AddRange(timeStampBytes); // create another byte[] from that list byte[] preSigningBytes = expectedProof.ToArray(); return(new ProofKeyOutput( accessToken, accessTokenBytes, accessTokenLength, accessTokenLengthBytes, hostUrl, hostUrlBytes, hostUrlLength, hostUrlLengthBytes, timeStamp, timeStampBytes, timeStampLength, timeStampLengthBytes, preSigningBytes)); }
public static ProofKeyOutput GetSignedProofData(ProofKeyInput proofData, RSACryptoServiceProvider rsaAlg) { ProofKeyOutput output = GetProofData(proofData); using (SHA256CryptoServiceProvider hashAlg = new SHA256CryptoServiceProvider()) { byte[] signedProofBytes = rsaAlg.SignData(output.PreSigningBytes, hashAlg); output.SignedBase64ProofKey = Convert.ToBase64String(signedProofBytes); return(output); } }