void IInvoice.AddSignature(KeyType type, ReadOnlyMemory <byte> publicPrefix, ReadOnlyMemory <byte> signature) { var key = ByteString.CopyFrom(publicPrefix.Span); var value = ByteString.CopyFrom(signature.Span); var pair = new SignaturePair(); switch (type) { case KeyType.Ed25519: pair.Ed25519 = value; break; case KeyType.ECDSASecp256K1: pair.ECDSASecp256K1 = value; break; case KeyType.Contract: pair.Contract = value; break; } if (_signatures.TryGetValue(key, out SignaturePair? existing)) { if (!pair.Equals(existing)) { throw new ArgumentException("Signature with Duplicate Prefix Identifier was provided, but did not have an Identical Signature."); } } else { _signatures.Add(key, pair); } }
private static string GetSignatureHex(SignaturePair signaturePair) { switch (signaturePair.SignatureCase) { case SignaturePair.SignatureOneofCase.Ed25519: return(Hex.FromBytes(signaturePair.Ed25519.ToByteArray())); case SignaturePair.SignatureOneofCase.ECDSASecp256K1: return(Hex.FromBytes(signaturePair.ECDSASecp256K1.ToByteArray())); case SignaturePair.SignatureOneofCase.Contract: return(Hex.FromBytes(signaturePair.Contract.ToByteArray())); } return(string.Empty); }
private void BuildSignatureMapRow(RenderTreeBuilder builder, SignaturePair signaturePair) { builder.OpenElement("span"); builder.AddAttribute("hg-sig-type"); builder.AddContent(signaturePair.SignatureCase); builder.CloseElement(); builder.OpenElement("span"); builder.AddAttribute("hg-sig-pub"); builder.AddContent(GetThumbprintHex(signaturePair)); builder.CloseElement(); builder.OpenElement("span"); builder.AddAttribute("hg-sig-hex"); builder.AddContent(GetSignatureHex(signaturePair)); builder.CloseElement(); }
private int BuildSignatureMapRow(RenderTreeBuilder builder, int count, SignaturePair signaturePair) { builder.OpenElement(count++, "span"); builder.AddAttribute(count++, "class", "sig-type"); builder.AddContent(count++, signaturePair.SignatureCase); builder.CloseElement(); builder.OpenElement(count++, "span"); builder.AddAttribute(count++, "class", "sig-pub"); builder.AddContent(count++, GetThumbprintHex(signaturePair)); builder.CloseElement(); builder.OpenElement(count++, "span"); builder.AddAttribute(count++, "class", "sig-hex"); builder.AddContent(count++, GetSignatureHex(signaturePair)); builder.CloseElement(); return(count); }
private void AddSignatureToInvoice(SignaturePair signature) { switch (signature.SignatureCase) { case Proto.SignaturePair.SignatureOneofCase.Ed25519: _input.Invoice.AddSignature(KeyType.Ed25519, signature.PubKeyPrefix.ToByteArray(), signature.Ed25519.ToByteArray()); break; case Proto.SignaturePair.SignatureOneofCase.RSA3072: _input.Invoice.AddSignature(KeyType.RSA3072, signature.PubKeyPrefix.ToByteArray(), signature.RSA3072.ToByteArray()); break; case Proto.SignaturePair.SignatureOneofCase.ECDSA384: _input.Invoice.AddSignature(KeyType.ECDSA384, signature.PubKeyPrefix.ToByteArray(), signature.ECDSA384.ToByteArray()); break; case Proto.SignaturePair.SignatureOneofCase.Contract: _input.Invoice.AddSignature(KeyType.Contract, signature.PubKeyPrefix.ToByteArray(), signature.Contract.ToByteArray()); break; } }
private static string GetThumbprintHex(SignaturePair signaturePair) { return(Hex.FromBytes(signaturePair.PubKeyPrefix.ToByteArray())); }