mirror of
https://github.com/wanghongenpin/proxypin.git
synced 2026-03-27 06:39:45 +08:00
69 lines
1.5 KiB
Dart
69 lines
1.5 KiB
Dart
import 'dart:typed_data';
|
|
|
|
import 'package:pointycastle/pointycastle.dart';
|
|
|
|
enum KeyUsage {
|
|
/// 0
|
|
DIGITAL_SIGNATURE,
|
|
|
|
/// 1 (Also called contentCommitment now)
|
|
NON_REPUDIATION,
|
|
|
|
/// 2
|
|
KEY_ENCIPHERMENT,
|
|
|
|
/// 3
|
|
DATA_ENCIPHERMENT,
|
|
|
|
/// 4
|
|
KEY_AGREEMENT,
|
|
|
|
/// 5
|
|
KEY_CERT_SIGN,
|
|
|
|
/// 6
|
|
CRL_SIGN,
|
|
|
|
/// 7
|
|
ENCIPHER_ONLY,
|
|
|
|
/// 8
|
|
DECIPHER_ONLY
|
|
}
|
|
|
|
class ExtensionKeyUsage {
|
|
static const int digitalSignature = (1 << 7);
|
|
static const int nonRepudiation = (1 << 6);
|
|
static const int keyEncipherment = (1 << 5);
|
|
static const int dataEncipherment = (1 << 4);
|
|
static const int keyAgreement = (1 << 3);
|
|
static const int keyCertSign = (1 << 2);
|
|
static const int cRLSign = (1 << 1);
|
|
static const int encipherOnly = (1 << 0);
|
|
static const int decipherOnly = (1 << 15);
|
|
|
|
final ASN1BitString bitString;
|
|
final bool critical;
|
|
|
|
ExtensionKeyUsage(int usage, {this.critical = true}) : bitString = ASN1BitString.fromBytes(keyUsageBytes(usage));
|
|
|
|
static Uint8List keyUsageBytes(int valueBytes) {
|
|
var bytes = [valueBytes];
|
|
if (valueBytes > 0xFF) {
|
|
final int firstValueByte = (valueBytes & int.parse("ff00", radix: 16)) >> 8;
|
|
final int secondValueByte = (valueBytes & int.parse("00ff", radix: 16));
|
|
bytes = [firstValueByte, secondValueByte];
|
|
}
|
|
|
|
return Uint8List.fromList(<int>[
|
|
// BitString identifier
|
|
3,
|
|
// Length
|
|
bytes.length + 1,
|
|
// Unused bytes at the end
|
|
1,
|
|
...bytes
|
|
]);
|
|
}
|
|
}
|