File tree 2 files changed +29
-3
lines changed
2 files changed +29
-3
lines changed Original file line number Diff line number Diff line change @@ -33,7 +33,6 @@ func (e *Entity) NewForwardingEntity(
33
33
now := config .Now ()
34
34
i := e .PrimaryIdentity ()
35
35
if e .PrimaryKey .KeyExpired (i .SelfSignature , now ) || // primary key has expired
36
- i .SelfSignature == nil || // user ID has no self-signature
37
36
i .SelfSignature .SigExpired (now ) || // user ID self-signature has expired
38
37
e .Revoked (now ) || // primary key has been revoked
39
38
i .Revoked (now ) { // user ID has been revoked
@@ -70,8 +69,7 @@ func (e *Entity) NewForwardingEntity(
70
69
// Handle all forwarder subkeys
71
70
for _ , forwarderSubKey := range e .Subkeys {
72
71
// Filter flags
73
- if ! forwarderSubKey .Sig .FlagsValid || forwarderSubKey .Sig .FlagCertify || forwarderSubKey .Sig .FlagSign ||
74
- forwarderSubKey .Sig .FlagAuthenticate || forwarderSubKey .Sig .FlagGroupKey {
72
+ if ! forwarderSubKey .PublicKey .PubKeyAlgo .CanEncrypt () {
75
73
continue
76
74
}
77
75
@@ -152,6 +150,12 @@ func (e *Entity) NewForwardingEntity(
152
150
// 0x40 - This key may be used for forwarded communications.
153
151
forwardeeSubKey .Sig .FlagForward = true
154
152
153
+ // Re-sign subkey binding signature
154
+ err = forwardeeSubKey .Sig .SignKey (forwardeeSubKey .PublicKey , forwardeeKey .PrivateKey , config )
155
+ if err != nil {
156
+ return nil , nil , err
157
+ }
158
+
155
159
// Append each valid instance to the list
156
160
instances = append (instances , instance )
157
161
}
Original file line number Diff line number Diff line change @@ -83,6 +83,8 @@ func TestForwardingFull(t *testing.T) {
83
83
t .Fatal (err )
84
84
}
85
85
86
+ charlesEntity = serializeAndParseForwardeeKey (t , charlesEntity )
87
+
86
88
if len (instances ) != 1 {
87
89
t .Fatalf ("invalid number of instances, expected 1 got %d" , len (instances ))
88
90
}
@@ -147,6 +149,8 @@ func TestForwardingFull(t *testing.T) {
147
149
t .Fatal (err )
148
150
}
149
151
152
+ danielEntity = serializeAndParseForwardeeKey (t , danielEntity )
153
+
150
154
secondTransformed := transformTestMessage (t , transformed , secondForwardInstances [0 ])
151
155
152
156
// Decrypt forwarded message for Charles
@@ -203,3 +207,21 @@ Loop:
203
207
204
208
return transformed
205
209
}
210
+
211
+ func serializeAndParseForwardeeKey (t * testing.T , key * Entity ) * Entity {
212
+ serializedEntity := bytes .NewBuffer (nil )
213
+ err := key .SerializePrivateWithoutSigning (serializedEntity , nil )
214
+ if err != nil {
215
+ t .Fatalf ("Error in serializing forwardee key: %s" , err )
216
+ }
217
+ el , err := ReadKeyRing (serializedEntity )
218
+ if err != nil {
219
+ t .Fatalf ("Error in reading forwardee key: %s" , err )
220
+ }
221
+
222
+ if len (el ) != 1 {
223
+ t .Fatalf ("Wrong number of entities in parsing, expected 1, got %d" , len (el ))
224
+ }
225
+
226
+ return el [0 ]
227
+ }
You can’t perform that action at this time.
0 commit comments