namespace Org.BouncyCastle.Asn1.X509 { /** * The KeyUsage object. *
* id-ce-keyUsage OBJECT IDENTIFIER ::= { id-ce 15 } * * KeyUsage ::= BIT STRING { * digitalSignature (0), * nonRepudiation (1), * keyEncipherment (2), * dataEncipherment (3), * keyAgreement (4), * keyCertSign (5), * cRLSign (6), * encipherOnly (7), * decipherOnly (8) } **/ public class KeyUsage : DerBitString { public const int DigitalSignature = (1 << 7); public const int NonRepudiation = (1 << 6); public const int KeyEncipherment = (1 << 5); public const int DataEncipherment = (1 << 4); public const int KeyAgreement = (1 << 3); public const int KeyCertSign = (1 << 2); public const int CrlSign = (1 << 1); public const int EncipherOnly = (1 << 0); public const int DecipherOnly = (1 << 15); public static new KeyUsage GetInstance(object obj) { if (obj is KeyUsage keyUsage) return keyUsage; if (obj is X509Extension x509Extension) return GetInstance(X509Extension.ConvertValueToObject(x509Extension)); if (obj == null) return null; return new KeyUsage(DerBitString.GetInstance(obj)); } public static KeyUsage FromExtensions(X509Extensions extensions) { return GetInstance(X509Extensions.GetExtensionParsedValue(extensions, X509Extensions.KeyUsage)); } /** * Basic constructor. * * @param usage - the bitwise OR of the Key Usage flags giving the * allowed uses for the key. * e.g. (KeyUsage.keyEncipherment | KeyUsage.dataEncipherment) */ public KeyUsage(int usage) : base(usage) { } private KeyUsage( DerBitString usage) : base(usage.GetBytes(), usage.PadBits) { } public override string ToString() { byte[] data = GetBytes(); if (data.Length == 1) { return "KeyUsage: 0x" + (data[0] & 0xff).ToString("X"); } return "KeyUsage: 0x" + ((data[1] & 0xff) << 8 | (data[0] & 0xff)).ToString("X"); } } }