From 6529112d56fb76cd823b314b2fa2c7f11ef37f36 Mon Sep 17 00:00:00 2001 From: Peter Dettman Date: Fri, 24 Feb 2023 22:08:14 +0700 Subject: Bcpg: update signature subpackets --- crypto/src/bcpg/sig/RegularExpression.cs | 40 ++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 crypto/src/bcpg/sig/RegularExpression.cs (limited to 'crypto/src/bcpg/sig/RegularExpression.cs') diff --git a/crypto/src/bcpg/sig/RegularExpression.cs b/crypto/src/bcpg/sig/RegularExpression.cs new file mode 100644 index 000000000..c4b48ea2a --- /dev/null +++ b/crypto/src/bcpg/sig/RegularExpression.cs @@ -0,0 +1,40 @@ +using System; +using System.Text.RegularExpressions; + +using Org.BouncyCastle.Utilities; + +namespace Org.BouncyCastle.Bcpg.Sig +{ + /** + * Regexp Packet - RFC 4880 5.2.3.14. Note: the RFC says the byte encoding is to be null terminated. + */ + public class RegularExpression + : SignatureSubpacket + { + public RegularExpression(bool critical, bool isLongLength, byte[] data) + : base(SignatureSubpacketTag.RegExp, critical, isLongLength, data) + { + if (data[data.Length - 1] != 0) + throw new ArgumentException("data in regex missing null termination"); + } + + public RegularExpression(bool critical, string regex) + : base(SignatureSubpacketTag.RegExp, critical, false, ToNullTerminatedUtf8ByteArray(regex)) + { + } + + public string Regex + { + // last byte is null terminator + get { return Strings.FromUtf8ByteArray(data, 0, data.Length - 1); } + } + + public byte[] GetRawRegex() => Arrays.Clone(data); + + private static byte[] ToNullTerminatedUtf8ByteArray(string str) + { + byte[] utf8 = Strings.ToUtf8ByteArray(str); + return Arrays.Append(utf8, 0x00); + } + } +} -- cgit 1.5.1