/// <summary> /// Encodes this instance. /// </summary> public JwsPayload Sign(object payload, string nonce = null) { var jsonSettings = JsonUtil.CreateSettings(); var protectedHeader = new { nonce = nonce, alg = keyPair.Algorithm.ToJwsAlgorithm(), jwk = keyPair.JsonWebKey, }; var entityJson = JsonConvert.SerializeObject(payload, Formatting.None, jsonSettings); var protectedHeaderJson = JsonConvert.SerializeObject(protectedHeader, Formatting.None, jsonSettings); var payloadEncoded = JwsConvert.ToBase64String(Encoding.UTF8.GetBytes(entityJson)); var protectedHeaderEncoded = JwsConvert.ToBase64String(Encoding.UTF8.GetBytes(protectedHeaderJson)); var signature = $"{protectedHeaderEncoded}.{payloadEncoded}"; var signatureBytes = Encoding.ASCII.GetBytes(signature); var signedSignatureBytes = keyPair.SignData(signatureBytes); var signedSignatureEncoded = JwsConvert.ToBase64String(signedSignatureBytes); var body = new JwsPayload { Protected = protectedHeaderEncoded, Payload = payloadEncoded, Signature = signedSignatureEncoded }; return(body); }
/// <summary> /// Encodes the specified entity for ACME requests. /// </summary> /// <param name="entity">The entity.</param> /// <param name="keyPair">The key pair.</param> /// <param name="nonce">The nonce.</param> /// <returns>The encoded JSON.</returns> private static object Encode(EntityBase entity, IAccountKey keyPair, string nonce) { var jsonSettings = JsonUtil.CreateSettings(); var unprotectedHeader = new { alg = keyPair.Algorithm.ToJwsAlgorithm(), jwk = keyPair.Jwk }; var protectedHeader = new { nonce = nonce }; var entityJson = JsonConvert.SerializeObject(entity, Formatting.None, jsonSettings); var protectedHeaderJson = JsonConvert.SerializeObject(protectedHeader, Formatting.None, jsonSettings); var payloadEncoded = JwsConvert.ToBase64String(Encoding.UTF8.GetBytes(entityJson)); var protectedHeaderEncoded = JwsConvert.ToBase64String(Encoding.UTF8.GetBytes(protectedHeaderJson)); var signature = $"{protectedHeaderEncoded}.{payloadEncoded}"; var signatureBytes = Encoding.ASCII.GetBytes(signature); var signedSignatureBytes = keyPair.SignData(signatureBytes); var signedSignatureEncoded = JwsConvert.ToBase64String(signedSignatureBytes); var body = new { header = unprotectedHeader, @protected = protectedHeaderEncoded, payload = payloadEncoded, signature = signedSignatureEncoded }; return(body); }