Skip to content

Commit 94d11df

Browse files
authored
Merge pull request #3 from inuEbisu/refactor-cleanup
refactor: move constants to respective classes for better encapsulation
2 parents a6add54 + 9b3e42f commit 94d11df

6 files changed

Lines changed: 187 additions & 208 deletions

File tree

lib/src/ctap2/constants.dart

Lines changed: 0 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -14,99 +14,3 @@ enum Ctap2Commands {
1414

1515
final int value;
1616
}
17-
18-
// MakeCredential parameter indices
19-
const int mcClientDataHashIdx = 1;
20-
const int mcRpIdx = 2;
21-
const int mcUserIdx = 3;
22-
const int mcPubKeyCredParamsIdx = 4;
23-
const int mcExcludeListIdx = 5;
24-
const int mcExtensionsIdx = 6;
25-
const int mcOptionsIdx = 7;
26-
const int mcPinAuthIdx = 8;
27-
const int mcPinProtocolIdx = 9;
28-
const int mcEnterpriseAttestationIdx = 10;
29-
30-
// MakeCredential response indices
31-
const int mcRspFmtIdx = 1;
32-
const int mcRspAuthDataIdx = 2;
33-
const int mcRspAttStmtIdx = 3;
34-
const int mcRspEpAttIdx = 4;
35-
const int mcRspLargeBlobKeyIdx = 5;
36-
37-
// AuthenticatorInfo parameter indices
38-
const int authInfoVersionsIdx = 1;
39-
const int authInfoExtensionsIdx = 2;
40-
const int authInfoAaguidIdx = 3;
41-
const int authInfoOptionsIdx = 4;
42-
const int authInfoMaxMsgSizeIdx = 5;
43-
const int authInfoPinUvAuthProtocolsIdx = 6;
44-
const int authInfoMaxCredentialCountInListIdx = 7;
45-
const int authInfoMaxCredentialIdLengthIdx = 8;
46-
const int authInfoTransportsIdx = 9;
47-
const int authInfoAlgorithmsIdx = 10;
48-
const int authInfoMaxSerializedLargeBlobArrayIdx = 11;
49-
const int authInfoForcePinChangeIdx = 12;
50-
const int authInfoMinPinLengthIdx = 13;
51-
const int authInfoFirmwareVersionIdx = 14;
52-
const int authInfoMaxCredBlobLengthIdx = 15;
53-
const int authInfoMaxRpIdsForSetMinPinLengthIdx = 16;
54-
const int authInfoPreferredPlatformUvAttemptsIdx = 17;
55-
const int authInfoUvModalityIdx = 18;
56-
const int authInfoCertificationsIdx = 19;
57-
const int authInfoRemainingDiscoverableCredentialsIdx = 20;
58-
const int authInfoVendorPrototypeConfigCommandsIdx = 21;
59-
60-
// ClientPin parameter indices
61-
const int cpPinUvAuthProtocolIdx = 1;
62-
const int cpSubCommandIdx = 2;
63-
const int cpKeyAgreementIdx = 3;
64-
const int cpPinUvAuthParamIdx = 4;
65-
const int cpNewPinEncIdx = 5;
66-
const int cpPinHashEncIdx = 6;
67-
const int cpPermissionsIdx = 9;
68-
const int cpRpIdIdx = 10;
69-
70-
// ClientPin response indices
71-
const int cpRspKeyAgreementIdx = 1;
72-
const int cpRspPinUvAuthTokenIdx = 2;
73-
const int cpRspPinRetriesIdx = 3;
74-
const int cpRspPowerCycleStateIdx = 4;
75-
const int cpRspUvRetriesIdx = 5;
76-
77-
// CredentialManagement parameter indices
78-
const int credMgmtSubCmdIdx = 1;
79-
const int credMgmtParamsIdx = 2;
80-
const int credMgmtPinUvAuthProtocolIdx = 3;
81-
const int credMgmtPinUvAuthParamIdx = 4;
82-
83-
// CredentialManagement response indices
84-
const int credMgmtRspExistingResidentCredentialsCountIdx = 1;
85-
const int credMgmtRspMaxPossibleRemainingResidentCredentialsCountIdx = 2;
86-
const int credMgmtRspRpIdx = 3;
87-
const int credMgmtRspRpIdHashIdx = 4;
88-
const int credMgmtRspTotalRPsIdx = 5;
89-
const int credMgmtRspUserIdx = 6;
90-
const int credMgmtRspCredentialIdIdx = 7;
91-
const int credMgmtRspPublicKeyIdx = 8;
92-
const int credMgmtRspTotalCredentialsIdx = 9;
93-
const int credMgmtRspCredProtectIdx = 10;
94-
const int credMgmtRspLargeBlobKeyIdx = 11;
95-
96-
// GetAssertion parameter indices
97-
const int gaRpIdIdx = 1;
98-
const int gaClientDataHashIdx = 2;
99-
const int gaAllowListIdx = 3;
100-
const int gaExtensionsIdx = 4;
101-
const int gaOptionsIdx = 5;
102-
const int gaPinAuthIdx = 6;
103-
const int gaPinProtocolIdx = 7;
104-
105-
// GetAssertion response indices
106-
const int gaRspCredentialIdx = 1;
107-
const int gaRspAuthDataIdx = 2;
108-
const int gaRspSignatureIdx = 3;
109-
const int gaRspUserIdx = 4;
110-
const int gaRspNumberOfCredentialsIdx = 5;
111-
const int gaRspUserSelectedIdx = 6;
112-
const int gaRspLargeBlobKeyIdx = 7;
Lines changed: 64 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,28 @@
11
import 'package:cbor/cbor.dart';
22

3-
import '../constants.dart';
4-
53
class AuthenticatorInfo {
4+
static const int versionsIdx = 1;
5+
static const int extensionsIdx = 2;
6+
static const int aaguidIdx = 3;
7+
static const int optionsIdx = 4;
8+
static const int maxMsgSizeIdx = 5;
9+
static const int pinUvAuthProtocolsIdx = 6;
10+
static const int maxCredentialCountInListIdx = 7;
11+
static const int maxCredentialIdLengthIdx = 8;
12+
static const int transportsIdx = 9;
13+
static const int algorithmsIdx = 10;
14+
static const int maxSerializedLargeBlobArrayIdx = 11;
15+
static const int forcePinChangeIdx = 12;
16+
static const int minPinLengthIdx = 13;
17+
static const int firmwareVersionIdx = 14;
18+
static const int maxCredBlobLengthIdx = 15;
19+
static const int maxRpIdsForSetMinPinLengthIdx = 16;
20+
static const int preferredPlatformUvAttemptsIdx = 17;
21+
static const int uvModalityIdx = 18;
22+
static const int certificationsIdx = 19;
23+
static const int remainingDiscoverableCredentialsIdx = 20;
24+
static const int vendorPrototypeConfigCommandsIdx = 21;
25+
626
final List<String> versions;
727
final List<String>? extensions;
828
final List<int> aaguid;
@@ -51,103 +71,95 @@ class AuthenticatorInfo {
5171

5272
List<int> encode() {
5373
final map = <int, dynamic>{};
54-
map[authInfoVersionsIdx] = versions;
74+
map[versionsIdx] = versions;
5575
if (extensions != null) {
56-
map[authInfoExtensionsIdx] = extensions;
76+
map[extensionsIdx] = extensions;
5777
}
58-
map[authInfoAaguidIdx] = aaguid;
78+
map[aaguidIdx] = aaguid;
5979
if (options != null) {
60-
map[authInfoOptionsIdx] = options;
80+
map[optionsIdx] = options;
6181
}
6282
if (maxMsgSize != null) {
63-
map[authInfoMaxMsgSizeIdx] = maxMsgSize;
83+
map[maxMsgSizeIdx] = maxMsgSize;
6484
}
6585
if (pinUvAuthProtocols != null) {
66-
map[authInfoPinUvAuthProtocolsIdx] = pinUvAuthProtocols;
86+
map[pinUvAuthProtocolsIdx] = pinUvAuthProtocols;
6787
}
6888
if (maxCredentialCountInList != null) {
69-
map[authInfoMaxCredentialCountInListIdx] = maxCredentialCountInList;
89+
map[maxCredentialCountInListIdx] = maxCredentialCountInList;
7090
}
7191
if (maxCredentialIdLength != null) {
72-
map[authInfoMaxCredentialIdLengthIdx] = maxCredentialIdLength;
92+
map[maxCredentialIdLengthIdx] = maxCredentialIdLength;
7393
}
7494
if (transports != null) {
75-
map[authInfoTransportsIdx] = transports;
95+
map[transportsIdx] = transports;
7696
}
7797
if (algorithms != null) {
78-
map[authInfoAlgorithmsIdx] = algorithms;
98+
map[algorithmsIdx] = algorithms;
7999
}
80100
if (maxSerializedLargeBlobArray != null) {
81-
map[authInfoMaxSerializedLargeBlobArrayIdx] = maxSerializedLargeBlobArray;
101+
map[maxSerializedLargeBlobArrayIdx] = maxSerializedLargeBlobArray;
82102
}
83103
if (forcePinChange != null) {
84-
map[authInfoForcePinChangeIdx] = forcePinChange;
104+
map[forcePinChangeIdx] = forcePinChange;
85105
}
86106
if (minPinLength != null) {
87-
map[authInfoMinPinLengthIdx] = minPinLength;
107+
map[minPinLengthIdx] = minPinLength;
88108
}
89109
if (firmwareVersion != null) {
90-
map[authInfoFirmwareVersionIdx] = firmwareVersion;
110+
map[firmwareVersionIdx] = firmwareVersion;
91111
}
92112
if (maxCredBlobLength != null) {
93-
map[authInfoMaxCredBlobLengthIdx] = maxCredBlobLength;
113+
map[maxCredBlobLengthIdx] = maxCredBlobLength;
94114
}
95115
if (maxRpIdsForSetMinPinLength != null) {
96-
map[authInfoMaxRpIdsForSetMinPinLengthIdx] = maxRpIdsForSetMinPinLength;
116+
map[maxRpIdsForSetMinPinLengthIdx] = maxRpIdsForSetMinPinLength;
97117
}
98118
if (preferredPlatformUvAttempts != null) {
99-
map[authInfoPreferredPlatformUvAttemptsIdx] = preferredPlatformUvAttempts;
119+
map[preferredPlatformUvAttemptsIdx] = preferredPlatformUvAttempts;
100120
}
101121
if (uvModality != null) {
102-
map[authInfoUvModalityIdx] = uvModality;
122+
map[uvModalityIdx] = uvModality;
103123
}
104124
if (certifications != null) {
105-
map[authInfoCertificationsIdx] = certifications;
125+
map[certificationsIdx] = certifications;
106126
}
107127
if (remainingDiscoverableCredentials != null) {
108-
map[authInfoRemainingDiscoverableCredentialsIdx] =
128+
map[remainingDiscoverableCredentialsIdx] =
109129
remainingDiscoverableCredentials;
110130
}
111131
if (vendorPrototypeConfigCommands != null) {
112-
map[authInfoVendorPrototypeConfigCommandsIdx] =
113-
vendorPrototypeConfigCommands;
132+
map[vendorPrototypeConfigCommandsIdx] = vendorPrototypeConfigCommands;
114133
}
115134
return cbor.encode(CborValue(map));
116135
}
117136

118137
static AuthenticatorInfo decode(List<int> data) {
119138
final map = cbor.decode(data).toObject() as Map;
120139
return AuthenticatorInfo(
121-
versions: (map[authInfoVersionsIdx] as List).cast<String>(),
122-
extensions: (map[authInfoExtensionsIdx] as List?)?.cast<String>(),
123-
aaguid: map[authInfoAaguidIdx] as List<int>,
124-
options: (map[authInfoOptionsIdx] as Map?)?.cast<String, bool>(),
125-
maxMsgSize: map[authInfoMaxMsgSizeIdx] as int?,
126-
pinUvAuthProtocols:
127-
(map[authInfoPinUvAuthProtocolsIdx] as List?)?.cast<int>(),
128-
maxCredentialCountInList:
129-
map[authInfoMaxCredentialCountInListIdx] as int?,
130-
maxCredentialIdLength: map[authInfoMaxCredentialIdLengthIdx] as int?,
131-
transports: (map[authInfoTransportsIdx] as List?)?.cast<String>(),
132-
algorithms:
133-
(map[authInfoAlgorithmsIdx] as List?)?.cast<Map<String, int>>(),
134-
maxSerializedLargeBlobArray:
135-
map[authInfoMaxSerializedLargeBlobArrayIdx] as int?,
136-
forcePinChange: map[authInfoForcePinChangeIdx] as bool?,
137-
minPinLength: map[authInfoMinPinLengthIdx] as int?,
138-
firmwareVersion: map[authInfoFirmwareVersionIdx] as int?,
139-
maxCredBlobLength: map[authInfoMaxCredBlobLengthIdx] as int?,
140-
maxRpIdsForSetMinPinLength:
141-
map[authInfoMaxRpIdsForSetMinPinLengthIdx] as int?,
142-
preferredPlatformUvAttempts:
143-
map[authInfoPreferredPlatformUvAttemptsIdx] as int?,
144-
uvModality: map[authInfoUvModalityIdx] as int?,
145-
certifications:
146-
(map[authInfoCertificationsIdx] as Map?)?.cast<String, int>(),
140+
versions: (map[versionsIdx] as List).cast<String>(),
141+
extensions: (map[extensionsIdx] as List?)?.cast<String>(),
142+
aaguid: map[aaguidIdx] as List<int>,
143+
options: (map[optionsIdx] as Map?)?.cast<String, bool>(),
144+
maxMsgSize: map[maxMsgSizeIdx] as int?,
145+
pinUvAuthProtocols: (map[pinUvAuthProtocolsIdx] as List?)?.cast<int>(),
146+
maxCredentialCountInList: map[maxCredentialCountInListIdx] as int?,
147+
maxCredentialIdLength: map[maxCredentialIdLengthIdx] as int?,
148+
transports: (map[transportsIdx] as List?)?.cast<String>(),
149+
algorithms: (map[algorithmsIdx] as List?)?.cast<Map<String, int>>(),
150+
maxSerializedLargeBlobArray: map[maxSerializedLargeBlobArrayIdx] as int?,
151+
forcePinChange: map[forcePinChangeIdx] as bool?,
152+
minPinLength: map[minPinLengthIdx] as int?,
153+
firmwareVersion: map[firmwareVersionIdx] as int?,
154+
maxCredBlobLength: map[maxCredBlobLengthIdx] as int?,
155+
maxRpIdsForSetMinPinLength: map[maxRpIdsForSetMinPinLengthIdx] as int?,
156+
preferredPlatformUvAttempts: map[preferredPlatformUvAttemptsIdx] as int?,
157+
uvModality: map[uvModalityIdx] as int?,
158+
certifications: (map[certificationsIdx] as Map?)?.cast<String, int>(),
147159
remainingDiscoverableCredentials:
148-
map[authInfoRemainingDiscoverableCredentialsIdx] as int?,
160+
map[remainingDiscoverableCredentialsIdx] as int?,
149161
vendorPrototypeConfigCommands:
150-
(map[authInfoVendorPrototypeConfigCommandsIdx] as List?)?.cast<int>(),
162+
(map[vendorPrototypeConfigCommandsIdx] as List?)?.cast<int>(),
151163
);
152164
}
153165
}

lib/src/ctap2/requests/client_pin.dart

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,15 @@ import 'package:fido2/src/cose.dart';
33
import '../constants.dart';
44

55
class ClientPinRequest {
6+
static const int pinUvAuthProtocolIdx = 1;
7+
static const int subCommandIdx = 2;
8+
static const int keyAgreementIdx = 3;
9+
static const int pinUvAuthParamIdx = 4;
10+
static const int newPinEncIdx = 5;
11+
static const int pinHashEncIdx = 6;
12+
static const int permissionsIdx = 9;
13+
static const int rpIdIdx = 10;
14+
615
final int? pinUvAuthProtocol;
716
final int subCommand;
817
final CoseKey? keyAgreement;
@@ -26,32 +35,38 @@ class ClientPinRequest {
2635
List<int> encode() {
2736
final map = <int, dynamic>{};
2837
if (pinUvAuthProtocol != null) {
29-
map[cpPinUvAuthProtocolIdx] = pinUvAuthProtocol!;
38+
map[pinUvAuthProtocolIdx] = pinUvAuthProtocol!;
3039
}
31-
map[cpSubCommandIdx] = subCommand;
40+
map[subCommandIdx] = subCommand;
3241
if (keyAgreement != null) {
33-
map[cpKeyAgreementIdx] = keyAgreement!.toCbor();
42+
map[keyAgreementIdx] = keyAgreement!.toCbor();
3443
}
3544
if (pinUvAuthParam != null) {
36-
map[cpPinUvAuthParamIdx] = CborBytes(pinUvAuthParam!);
45+
map[pinUvAuthParamIdx] = CborBytes(pinUvAuthParam!);
3746
}
3847
if (newPinEnc != null) {
39-
map[cpNewPinEncIdx] = CborBytes(newPinEnc!);
48+
map[newPinEncIdx] = CborBytes(newPinEnc!);
4049
}
4150
if (pinHashEnc != null) {
42-
map[cpPinHashEncIdx] = CborBytes(pinHashEnc!);
51+
map[pinHashEncIdx] = CborBytes(pinHashEnc!);
4352
}
4453
if (permissions != null) {
45-
map[cpPermissionsIdx] = permissions!;
54+
map[permissionsIdx] = permissions!;
4655
}
4756
if (rpId != null) {
48-
map[cpRpIdIdx] = CborString(rpId!);
57+
map[rpIdIdx] = CborString(rpId!);
4958
}
5059
return [Ctap2Commands.clientPIN.value] + cbor.encode(CborValue(map));
5160
}
5261
}
5362

5463
class ClientPinResponse {
64+
static const int keyAgreementIdx = 1;
65+
static const int pinUvAuthTokenIdx = 2;
66+
static const int pinRetriesIdx = 3;
67+
static const int powerCycleStateIdx = 4;
68+
static const int uvRetriesIdx = 5;
69+
5570
final CoseKey? keyAgreement;
5671
final List<int>? pinUvAuthToken;
5772
final int? pinRetries;
@@ -69,14 +84,14 @@ class ClientPinResponse {
6984
static ClientPinResponse decode(List<int> data) {
7085
final map = cbor.decode(data).toObject() as Map;
7186
final keyAgreementMap =
72-
(map[cpRspKeyAgreementIdx] as Map?)?.cast<int, dynamic>();
87+
(map[keyAgreementIdx] as Map?)?.cast<int, dynamic>();
7388
return ClientPinResponse(
7489
keyAgreement:
7590
keyAgreementMap != null ? CoseKey.parse(keyAgreementMap) : null,
76-
pinUvAuthToken: (map[cpRspPinUvAuthTokenIdx] as List?)?.cast<int>(),
77-
pinRetries: map[cpRspPinRetriesIdx] as int?,
78-
powerCycleState: map[cpRspPowerCycleStateIdx] as bool?,
79-
uvRetries: map[cpRspUvRetriesIdx] as int?,
91+
pinUvAuthToken: (map[pinUvAuthTokenIdx] as List?)?.cast<int>(),
92+
pinRetries: map[pinRetriesIdx] as int?,
93+
powerCycleState: map[powerCycleStateIdx] as bool?,
94+
uvRetries: map[uvRetriesIdx] as int?,
8095
);
8196
}
8297
}

0 commit comments

Comments
 (0)