summary refs log tree commit diff
path: root/Crypto/src/bcpg/sig/RevocationReason.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Crypto/src/bcpg/sig/RevocationReason.cs')
-rw-r--r--Crypto/src/bcpg/sig/RevocationReason.cs60
1 files changed, 60 insertions, 0 deletions
diff --git a/Crypto/src/bcpg/sig/RevocationReason.cs b/Crypto/src/bcpg/sig/RevocationReason.cs
new file mode 100644

index 000000000..f32c1f64a --- /dev/null +++ b/Crypto/src/bcpg/sig/RevocationReason.cs
@@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Text; + +using Org.BouncyCastle.Utilities; + +namespace Org.BouncyCastle.Bcpg +{ + /// <summary> + /// Represents revocation reason OpenPGP signature sub packet. + /// </summary> + public class RevocationReason + : SignatureSubpacket + { + public RevocationReason(bool isCritical, byte[] data) + : base(SignatureSubpacketTag.RevocationReason, isCritical, data) + { + } + + public RevocationReason( + bool isCritical, + RevocationReasonTag reason, + string description) + : base(SignatureSubpacketTag.RevocationReason, isCritical, CreateData(reason, description)) + { + } + + private static byte[] CreateData( + RevocationReasonTag reason, + string description) + { + byte[] descriptionBytes = Strings.ToUtf8ByteArray(description); + byte[] data = new byte[1 + descriptionBytes.Length]; + + data[0] = (byte)reason; + Array.Copy(descriptionBytes, 0, data, 1, descriptionBytes.Length); + + return data; + } + + public virtual RevocationReasonTag GetRevocationReason() + { + return (RevocationReasonTag)GetData()[0]; + } + + public virtual string GetRevocationDescription() + { + byte[] data = GetData(); + if (data.Length == 1) + { + return string.Empty; + } + + byte[] description = new byte[data.Length - 1]; + Array.Copy(data, 1, description, 0, description.Length); + + return Strings.FromUtf8ByteArray(description); + } + } +}