Skip to content

Commit f214e5a

Browse files
authored
Merge pull request #81 from jerson/subkeys-metadata
feat: Added subkeys to metadata methods
2 parents 6e36a3d + 43de1a7 commit f214e5a

File tree

9 files changed

+140
-6
lines changed

9 files changed

+140
-6
lines changed
16.1 KB
Binary file not shown.
16 KB
Binary file not shown.
12 KB
Binary file not shown.
16.1 KB
Binary file not shown.

example/android/gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,4 @@
1919

2020
android.useAndroidX=true
2121
android.enableJetifier=true
22-
FLIPPER_VERSION=0.54.0
22+
FLIPPER_VERSION=0.99.0

ios/libopenpgp_bridge.a

56 KB
Binary file not shown.

src/index.tsx

Lines changed: 81 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ export interface KeyOptions {
8282
* PubKeyAlgoEdDSA, or PubKeyAlgoECDH. If empty Curve25519 is used.
8383
*/
8484
curve?: Curve;
85-
85+
8686
/**
8787
* RSABits is the number of bits in new RSA keys made with NewEntity.
8888
* If zero, then 2048 bit keys are created.
@@ -149,6 +149,8 @@ export interface PublicKeyMetadata {
149149
isSubKey: boolean;
150150
canSign: boolean;
151151
canEncrypt: boolean;
152+
identities?: Identity[];
153+
subKeys?: PublicKeyMetadata[];
152154
}
153155
export interface PrivateKeyMetadata {
154156
keyID: string;
@@ -159,6 +161,15 @@ export interface PrivateKeyMetadata {
159161
isSubKey: boolean;
160162
encrypted: boolean;
161163
canSign: boolean;
164+
identities?: Identity[];
165+
subKeys?: PrivateKeyMetadata[];
166+
}
167+
168+
export interface Identity {
169+
id: string;
170+
name: string;
171+
comment: string;
172+
email: string;
162173
}
163174

164175
/**
@@ -837,6 +848,39 @@ export default class OpenPGP {
837848
throw new Error('empty output');
838849
}
839850

851+
let identities: Identity[] = [];
852+
for (let i = 0; i < output.identitiesLength(); i++) {
853+
const item = output.identities(i);
854+
if (!item) {
855+
continue;
856+
}
857+
identities.push({
858+
comment: item.comment() || '',
859+
email: item.email() || '',
860+
name: item.name() || '',
861+
id: item.id() || '',
862+
});
863+
}
864+
865+
let subKeys: PublicKeyMetadata[] = [];
866+
for (let i = 0; i < output.subKeysLength(); i++) {
867+
const item = output.subKeys(i);
868+
if (!item) {
869+
continue;
870+
}
871+
subKeys.push({
872+
algorithm: item.algorithm() || '',
873+
keyID: item.keyId() || '',
874+
keyIDShort: item.keyIdShort() || '',
875+
creationTime: item.creationTime() || '',
876+
fingerprint: item.fingerprint() || '',
877+
keyIDNumeric: item.keyIdNumeric() || '',
878+
isSubKey: item.isSubKey(),
879+
canSign: item.canSign(),
880+
canEncrypt: item.canEncrypt(),
881+
});
882+
}
883+
840884
return {
841885
algorithm: output.algorithm() || '',
842886
keyID: output.keyId() || '',
@@ -847,6 +891,8 @@ export default class OpenPGP {
847891
isSubKey: output.isSubKey(),
848892
canSign: output.canSign(),
849893
canEncrypt: output.canEncrypt(),
894+
identities: identities,
895+
subKeys: subKeys,
850896
} as PublicKeyMetadata;
851897
}
852898

@@ -865,6 +911,38 @@ export default class OpenPGP {
865911
throw new Error('empty output');
866912
}
867913

914+
let identities: Identity[] = [];
915+
for (let i = 0; i < output.identitiesLength(); i++) {
916+
const item = output.identities(i);
917+
if (!item) {
918+
continue;
919+
}
920+
identities.push({
921+
comment: item.comment() || '',
922+
email: item.email() || '',
923+
name: item.name() || '',
924+
id: item.id() || '',
925+
});
926+
}
927+
928+
let subKeys: PrivateKeyMetadata[] = [];
929+
for (let i = 0; i < output.subKeysLength(); i++) {
930+
const item = output.subKeys(i);
931+
if (!item) {
932+
continue;
933+
}
934+
subKeys.push({
935+
keyID: item.keyId() || '',
936+
keyIDShort: item.keyIdShort() || '',
937+
creationTime: item.creationTime() || '',
938+
fingerprint: item.fingerprint() || '',
939+
keyIDNumeric: item.keyIdNumeric() || '',
940+
isSubKey: item.isSubKey(),
941+
encrypted: item.encrypted(),
942+
canSign: item.canSign(),
943+
});
944+
}
945+
868946
return {
869947
keyID: output.keyId() || '',
870948
keyIDShort: output.keyIdShort() || '',
@@ -874,6 +952,8 @@ export default class OpenPGP {
874952
isSubKey: output.isSubKey(),
875953
encrypted: output.encrypted(),
876954
canSign: output.canSign(),
955+
identities: identities,
956+
subKeys: subKeys,
877957
} as PrivateKeyMetadata;
878958
}
879959
}

src/model/private-key-metadata.ts

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,18 @@ identitiesLength():number {
116116
return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;
117117
}
118118

119+
subKeys(index: number, obj?:PrivateKeyMetadata):PrivateKeyMetadata|null {
120+
const offset = this.bb!.__offset(this.bb_pos, 22);
121+
return offset ? (obj || new PrivateKeyMetadata()).__init(this.bb!.__indirect(this.bb!.__vector(this.bb_pos + offset) + index * 4), this.bb!) : null;
122+
}
123+
124+
subKeysLength():number {
125+
const offset = this.bb!.__offset(this.bb_pos, 22);
126+
return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;
127+
}
128+
119129
static startPrivateKeyMetadata(builder:flatbuffers.Builder) {
120-
builder.startObject(9);
130+
builder.startObject(10);
121131
}
122132

123133
static addKeyId(builder:flatbuffers.Builder, keyIdOffset:flatbuffers.Offset) {
@@ -168,12 +178,28 @@ static startIdentitiesVector(builder:flatbuffers.Builder, numElems:number) {
168178
builder.startVector(4, numElems, 4);
169179
}
170180

181+
static addSubKeys(builder:flatbuffers.Builder, subKeysOffset:flatbuffers.Offset) {
182+
builder.addFieldOffset(9, subKeysOffset, 0);
183+
}
184+
185+
static createSubKeysVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset {
186+
builder.startVector(4, data.length, 4);
187+
for (let i = data.length - 1; i >= 0; i--) {
188+
builder.addOffset(data[i]!);
189+
}
190+
return builder.endVector();
191+
}
192+
193+
static startSubKeysVector(builder:flatbuffers.Builder, numElems:number) {
194+
builder.startVector(4, numElems, 4);
195+
}
196+
171197
static endPrivateKeyMetadata(builder:flatbuffers.Builder):flatbuffers.Offset {
172198
const offset = builder.endObject();
173199
return offset;
174200
}
175201

176-
static createPrivateKeyMetadata(builder:flatbuffers.Builder, keyIdOffset:flatbuffers.Offset, keyIdShortOffset:flatbuffers.Offset, creationTimeOffset:flatbuffers.Offset, fingerprintOffset:flatbuffers.Offset, keyIdNumericOffset:flatbuffers.Offset, isSubKey:boolean, encrypted:boolean, canSign:boolean, identitiesOffset:flatbuffers.Offset):flatbuffers.Offset {
202+
static createPrivateKeyMetadata(builder:flatbuffers.Builder, keyIdOffset:flatbuffers.Offset, keyIdShortOffset:flatbuffers.Offset, creationTimeOffset:flatbuffers.Offset, fingerprintOffset:flatbuffers.Offset, keyIdNumericOffset:flatbuffers.Offset, isSubKey:boolean, encrypted:boolean, canSign:boolean, identitiesOffset:flatbuffers.Offset, subKeysOffset:flatbuffers.Offset):flatbuffers.Offset {
177203
PrivateKeyMetadata.startPrivateKeyMetadata(builder);
178204
PrivateKeyMetadata.addKeyId(builder, keyIdOffset);
179205
PrivateKeyMetadata.addKeyIdShort(builder, keyIdShortOffset);
@@ -184,6 +210,7 @@ static createPrivateKeyMetadata(builder:flatbuffers.Builder, keyIdOffset:flatbuf
184210
PrivateKeyMetadata.addEncrypted(builder, encrypted);
185211
PrivateKeyMetadata.addCanSign(builder, canSign);
186212
PrivateKeyMetadata.addIdentities(builder, identitiesOffset);
213+
PrivateKeyMetadata.addSubKeys(builder, subKeysOffset);
187214
return PrivateKeyMetadata.endPrivateKeyMetadata(builder);
188215
}
189216
}

src/model/public-key-metadata.ts

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,18 @@ identitiesLength():number {
123123
return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;
124124
}
125125

126+
subKeys(index: number, obj?:PublicKeyMetadata):PublicKeyMetadata|null {
127+
const offset = this.bb!.__offset(this.bb_pos, 24);
128+
return offset ? (obj || new PublicKeyMetadata()).__init(this.bb!.__indirect(this.bb!.__vector(this.bb_pos + offset) + index * 4), this.bb!) : null;
129+
}
130+
131+
subKeysLength():number {
132+
const offset = this.bb!.__offset(this.bb_pos, 24);
133+
return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;
134+
}
135+
126136
static startPublicKeyMetadata(builder:flatbuffers.Builder) {
127-
builder.startObject(10);
137+
builder.startObject(11);
128138
}
129139

130140
static addAlgorithm(builder:flatbuffers.Builder, algorithmOffset:flatbuffers.Offset) {
@@ -179,12 +189,28 @@ static startIdentitiesVector(builder:flatbuffers.Builder, numElems:number) {
179189
builder.startVector(4, numElems, 4);
180190
}
181191

192+
static addSubKeys(builder:flatbuffers.Builder, subKeysOffset:flatbuffers.Offset) {
193+
builder.addFieldOffset(10, subKeysOffset, 0);
194+
}
195+
196+
static createSubKeysVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset {
197+
builder.startVector(4, data.length, 4);
198+
for (let i = data.length - 1; i >= 0; i--) {
199+
builder.addOffset(data[i]!);
200+
}
201+
return builder.endVector();
202+
}
203+
204+
static startSubKeysVector(builder:flatbuffers.Builder, numElems:number) {
205+
builder.startVector(4, numElems, 4);
206+
}
207+
182208
static endPublicKeyMetadata(builder:flatbuffers.Builder):flatbuffers.Offset {
183209
const offset = builder.endObject();
184210
return offset;
185211
}
186212

187-
static createPublicKeyMetadata(builder:flatbuffers.Builder, algorithmOffset:flatbuffers.Offset, keyIdOffset:flatbuffers.Offset, keyIdShortOffset:flatbuffers.Offset, creationTimeOffset:flatbuffers.Offset, fingerprintOffset:flatbuffers.Offset, keyIdNumericOffset:flatbuffers.Offset, isSubKey:boolean, canSign:boolean, canEncrypt:boolean, identitiesOffset:flatbuffers.Offset):flatbuffers.Offset {
213+
static createPublicKeyMetadata(builder:flatbuffers.Builder, algorithmOffset:flatbuffers.Offset, keyIdOffset:flatbuffers.Offset, keyIdShortOffset:flatbuffers.Offset, creationTimeOffset:flatbuffers.Offset, fingerprintOffset:flatbuffers.Offset, keyIdNumericOffset:flatbuffers.Offset, isSubKey:boolean, canSign:boolean, canEncrypt:boolean, identitiesOffset:flatbuffers.Offset, subKeysOffset:flatbuffers.Offset):flatbuffers.Offset {
188214
PublicKeyMetadata.startPublicKeyMetadata(builder);
189215
PublicKeyMetadata.addAlgorithm(builder, algorithmOffset);
190216
PublicKeyMetadata.addKeyId(builder, keyIdOffset);
@@ -196,6 +222,7 @@ static createPublicKeyMetadata(builder:flatbuffers.Builder, algorithmOffset:flat
196222
PublicKeyMetadata.addCanSign(builder, canSign);
197223
PublicKeyMetadata.addCanEncrypt(builder, canEncrypt);
198224
PublicKeyMetadata.addIdentities(builder, identitiesOffset);
225+
PublicKeyMetadata.addSubKeys(builder, subKeysOffset);
199226
return PublicKeyMetadata.endPublicKeyMetadata(builder);
200227
}
201228
}

0 commit comments

Comments
 (0)