[guile-gcrypt] Symmetric Ciphers Module

Saad Rhoulam <[email protected]> Fri, 10 Apr 2026 22:38:11 +0800
Newsgroups gmane.comp.encryption.gpg.libgcrypt.devel
Message-ID <[email protected]>
This is a multi-part message in MIME format.
--------------0qiPjf1CZJfDkxEpGYjL60Au
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

Hello everyone,

While hoping to make something in Guile that needed symmetric 
encryption, it fell to me to extend guile-gcrypt. Unfortunately, because 
of how some procedures like `gcrypt_cipher_gettag` are implemented, the 
Guile FFI reports that they don't exist! This blocks AEAD, which is what 
I needed, so it's back to the drawing board for me. But, short of AEAD, 
some amount of symmetric cryptographic functionality is accessible from 
Guile, hence the attached patch.

I've left the AEAD-related code commented out in the module in case 
anyone is interested in this challenge.

Regards,

S. Rhoulam

--------------0qiPjf1CZJfDkxEpGYjL60Au
Content-Type: text/x-patch; charset=UTF-8; name="cipher.patch"
Content-Disposition: attachment; filename="cipher.patch"
Content-Transfer-Encoding: base64

ZGlmZiAtLWdpdCBhL2djcnlwdC9jaXBoZXIuc2NtIGIvZ2NyeXB0L2NpcGhlci5zY20KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZmMjhjOAotLS0gL2Rldi9udWxs
CisrKyBiL2djcnlwdC9jaXBoZXIuc2NtCkBAIC0wLDAgKzEsNDI1IEBACis7OzsgZ3VpbGUt
Z2NyeXB0IC0tLSBjcnlwdG8gdG9vbGluZyBmb3IgZ3VpbGUKKzs7OyBDb3B5cmlnaHQgwqkg
MjAyNiBTYWFkIFJob3VsYW0gPHNhYWRAcmhvdWxhbS50ZWNoPgorOzs7Cis7OzsgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgZ3VpbGUtZ2NyeXB0LgorOzs7Cis7OzsgZ3VpbGUtZ2NyeXB0IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorOzs7IG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorOzs7IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mCis7OzsgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCis7OzsKKzs7OyBndWlsZS1nY3J5cHQg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0
Cis7OzsgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorOzs7IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCis7OzsgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKzs7OworOzs7IFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorOzs7IGFsb25nIHdpdGggZ3VpbGUtZ2NyeXB0LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93
d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisoZGVmaW5lLW1vZHVsZSAoZ2NyeXB0IGNpcGhl
cikKKyAgIzp1c2UtbW9kdWxlIChpY2UtOSBtYXRjaCkKKyAgIzp1c2UtbW9kdWxlIChnY3J5
cHQgaW50ZXJuYWwpCisgICM6dXNlLW1vZHVsZSAoZ2NyeXB0IHJhbmRvbSkKKyAgIzp1c2Ut
bW9kdWxlIChybnJzIGJ5dGV2ZWN0b3JzKQorICAjOnVzZS1tb2R1bGUgKHN5c3RlbSBmb3Jl
aWduKQorICAjOmV4cG9ydCAoY2lwaGVyLWFsZ29yaXRobQorICAgICAgICAgICAgbG9va3Vw
LWNpcGhlci1hbGdvcml0aG0KKyAgICAgICAgICAgIGNpcGhlci1hbGdvcml0aG0tbmFtZQor
ICAgICAgICAgICAgY2lwaGVyLWtleS1zaXplCisKKyAgICAgICAgICAgIGNpcGhlci1tb2Rl
CisgICAgICAgICAgICBsb29rdXAtY2lwaGVyLW1vZGUKKyAgICAgICAgICAgIGNpcGhlci1t
b2RlLW5hbWUKKworICAgICAgICAgICAgZGVjcnlwdAorICAgICAgICAgICAgOzsgZGVjcnlw
dC1hZWFkCisgICAgICAgICAgICBlbmNyeXB0CisgICAgICAgICAgICA7OyBlbmNyeXB0LWFl
YWQKKyAgICAgICAgICAgICkKKyAgKQorCisoZGVmaW5lLXN5bnRheC1ydWxlIChkZWZpbmUt
c3ludGF4LXB1YmxpYyBuYW1lIHZhbHVlKQorICAoYmVnaW4KKyAgICAoZGVmaW5lLXN5bnRh
eCBuYW1lIHZhbHVlKQorICAgIChleHBvcnQgbmFtZSkpKQorCisoZGVmaW5lLXN5bnRheC1y
dWxlIChkZWZpbmUtY2lwaGVyLWFsZ29yaXRobXMgbmFtZS0+aW50ZWdlcgorICAgICAgICAg
ICAgICAgICAgICAgIHN5bWJvbC0+aW50ZWdlciBpbnRlZ2VyLT5zeW1ib2wgY2lwaGVyLWtl
eS1zaXplCisgICAgICAgICAgICAgICAgICAgICAgKG5hbWUgaWQgc2l6ZSkgLi4uKQorICAi
RGVmaW5lIGNpcGhlciBhbGdvcml0aG1zIHdpdGggdGhlaXIgTkFNRSwgbnVtZXJpY2FsIElE
LCBhbmQgU0laRSBpbiBieXRlcy4iCisgIChiZWdpbgorICAgIDs7IE1ha2Ugc3VyZSBOQU1F
IGlzIGJvdW5kIHRvIGZvbGxvdyBiZXN0IHByYWN0aWNlcyBmb3Igc3ludGF4IG1hdGNoaW5n
CisgICAgOzsgKGluZm8gIihndWlsZSkgU3ludGF4IFJ1bGVzIikuCisgICAgKGRlZmluZS1z
eW50YXgtcHVibGljIG5hbWUKKyAgICAgIChsYW1iZGEgKHMpCisgICAgICAgIChzeW50YXgt
dmlvbGF0aW9uICduYW1lICJcCitzeW50YWN0aWMga2V5d29yZCBpcyBtZWFudCB0byBiZSB1
c2VkIHdpdGggJ2NpcGhlci1hbGdvcml0aG0nIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICBzIHMpKSkKKyAgICAuLi4KKworICAgIChkZWZpbmUtZW51bWVyYXRlLXR5cGUgbmFtZS0+
aW50ZWdlciBzeW1ib2wtPmludGVnZXIgaW50ZWdlci0+c3ltYm9sCisgICAgICAobmFtZSBp
ZCkgLi4uKQorCisgICAgKGRlZmluZS1sb29rdXAtcHJvY2VkdXJlIGNpcGhlci1rZXktc2l6
ZQorICAgICAgIlJldHVybiB0aGUgc2l6ZSBpbiBieXRlcyBvZiBhIGtleSBmb3IgdGhlIGdp
dmVuIGNpcGhlciBhbGdvcml0aG0uIgorICAgICAgKGlkIHNpemUpIC4uLikpKQorCisoZGVm
aW5lLXN5bnRheC1ydWxlIChkZWZpbmUtY2lwaGVyLW1vZGVzIG5hbWUtPmludGVnZXIKKyAg
ICAgICAgICAgICAgICAgICAgICBzeW1ib2wtPmludGVnZXIgaW50ZWdlci0+c3ltYm9sCisg
ICAgICAgICAgICAgICAgICAgICAgKG5hbWUgaWQpIC4uLikKKyAgIkRlZmluZSBjaXBoZXIg
bW9kZXMgd2l0aCB0aGVpciBOQU1FIGFuZCBudW1lcmljYWwgSUQuIgorICAoYmVnaW4KKyAg
ICA7OyBNYWtlIHN1cmUgTkFNRSBpcyBib3VuZCB0byBmb2xsb3cgYmVzdCBwcmFjdGljZXMg
Zm9yIHN5bnRheCBtYXRjaGluZworICAgIDs7IChpbmZvICIoZ3VpbGUpIFN5bnRheCBSdWxl
cyIpLgorICAgIChkZWZpbmUtc3ludGF4LXB1YmxpYyBuYW1lCisgICAgICAobGFtYmRhIChz
KQorICAgICAgICAoc3ludGF4LXZpb2xhdGlvbiAnbmFtZSAiXAorc3ludGFjdGljIGtleXdv
cmQgaXMgbWVhbnQgdG8gYmUgdXNlZCB3aXRoICdjaXBoZXItbW9kZSciCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIHMgcykpKQorICAgIC4uLgorCisgICAgKGRlZmluZS1lbnVtZXJh
dGUtdHlwZSBuYW1lLT5pbnRlZ2VyIHN5bWJvbC0+aW50ZWdlciBpbnRlZ2VyLT5zeW1ib2wK
KyAgICAgIChuYW1lIGlkKSAuLi4pKSkKKworKGRlZmluZS1jaXBoZXItYWxnb3JpdGhtcyBj
aXBoZXItYWxnb3JpdGhtCisgIGxvb2t1cC1jaXBoZXItYWxnb3JpdGhtIGNpcGhlci1hbGdv
cml0aG0tbmFtZQorICBjaXBoZXIta2V5LXNpemUKKworICA7OyBHQ1JZX0NJUEhFUl8qCisK
KyAgKDNkZXMgMiAyNCkKKyAgKGNhc3Q1IDMgMTYpCisgIChhZXMxMjggNyAxNikKKyAgKGFl
czE5MiA4IDI0KQorICAoYWVzMjU2IDkgMzIpCisgICh0d29maXNoIDEwIDMyKQorICAodHdv
ZmlzaDEyOCAzMDMgMTYpCisgIChzZXJwZW50MTI4IDMwNCAxNikKKyAgKHNlcnBlbnQxOTIg
MzA1IDI0KQorICAoc2VycGVudDI1NiAzMDYgMzIpCisgIChzZWVkIDMwOSAxNikKKyAgKGNh
bWVsbGlhMTI4IDMxMCAxNikKKyAgKGNhbWVsbGlhMTkyIDMxMSAyNCkKKyAgKGNhbWVsbGlh
MjU2IDMxMiAzMikKKyAgKHNtNCAzMTggMTYpKQorCisoZGVmaW5lLWNpcGhlci1tb2RlcyBj
aXBoZXItbW9kZQorICBsb29rdXAtY2lwaGVyLW1vZGUgY2lwaGVyLW1vZGUtbmFtZQorCisg
IDs7IEdDUllfQ0lQSEVSX01PREVfKgorICAoZWNiIDEpCisgIChjZmIgMikKKyAgKGNiYyAz
KQorICAoc3RyZWFtIDQpCisgIChvZmIgNSkKKyAgKGN0ciA2KQorICAoYWVzd3JhcCA3KQor
ICAoY2NtIDgpCisgIChnY20gOSkKKyAgKHBvbHkxMzA1IDEwKQorICAob2NiIDExKQorICAo
Y2ZiOCAxMikKKyAgKHh0cyAxMykKKyAgKGVheCAxNCkKKyAgKHNpdiAxNSkKKyAgKGdjbS1z
aXYgMTYpKQorCisoZGVmaW5lIGNpcGhlci1hbGdvLWtleWxlbgorICAobGliZ2NyeXB0LT5w
cm9jZWR1cmUgaW50ICJnY3J5X2NpcGhlcl9nZXRfYWxnb19rZXlsZW4iIGAoLGludCkpKQor
CisoZGVmaW5lIGNpcGhlci1hbGdvLWJsa2xlbgorICAobGliZ2NyeXB0LT5wcm9jZWR1cmUg
aW50ICJnY3J5X2NpcGhlcl9nZXRfYWxnb19ibGtsZW4iIGAoLGludCkpKQorCisoZGVmaW5l
ICVuby1lcnJvciAwKSAgOyBHUEdfRVJSX05PX0VSUk9SCisKKyhkZWZpbmUtd3JhcHBlZC1w
b2ludGVyLXR5cGUgPGNpcGhlcj4KKyAgY2lwaGVyPworICBwb2ludGVyLT5jaXBoZXIgY2lw
aGVyLT5wb2ludGVyCisgIChsYW1iZGEgKGNpcGhlciBwb3J0KQorICAgIChmb3JtYXQgcG9y
dCAiIzxjaXBoZXIgfng+IgorICAgICAgICAgICAgKHBvaW50ZXItYWRkcmVzcyAoY2lwaGVy
LT5wb2ludGVyIGNpcGhlcikpKSkpCisKKyhkZWZpbmUgJWdjcnktY2lwaGVyLW9wZW4KKyAg
KGxpYmdjcnlwdC0+cHJvY2VkdXJlIGludCAiZ2NyeV9jaXBoZXJfb3BlbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIDs7IGdjcnlfY2lwaGVyX2hkX3QgKkhELCBpbnQgQUxHTywKKyAg
ICAgICAgICAgICAgICAgICAgICAgIDs7IGludCBNT0RFLAorICAgICAgICAgICAgICAgICAg
ICAgICAgOzsgdW5zaWduZWQgaW50IEZMQUdTCisgICAgICAgICAgICAgICAgICAgICAgICBg
KCogLGludCAsaW50ICx1bnNpZ25lZC1pbnQpKSkKKworKGRlZmluZSAoY2lwaGVyLW9wZW4g
YWxnb3JpdGhtIG1vZGUpCisgICJDcmVhdGUgYSA8Y2lwaGVyPiBvYmplY3Qgc2V0IHRvIHVz
ZSBBTEdPUklUSE0gYW5kIE1PREUiCisgIChsZXQqICgoY2lwaGVyIChieXRldmVjdG9yLT5w
b2ludGVyIChtYWtlLWJ5dGV2ZWN0b3IgKHNpemVvZiAnKikpKSkKKyAgICAgICAgIChlcnIg
KCVnY3J5LWNpcGhlci1vcGVuIGNpcGhlciBhbGdvcml0aG0gbW9kZSAwKSkpCisgICAgKGlm
ICg9IGVyciAwKQorICAgICAgICAocG9pbnRlci0+Y2lwaGVyIChkZXJlZmVyZW5jZS1wb2lu
dGVyIGNpcGhlcikpCisgICAgICAgICh0aHJvdyAnZ2NyeS1lcnJvciAnY2lwaGVyLW9wZW4g
ZXJyKSkpKQorCisoZGVmaW5lICVnY3J5LWNpcGhlci1zZXRrZXkKKyAgKGxpYmdjcnlwdC0+
cHJvY2VkdXJlIGludCAiZ2NyeV9jaXBoZXJfc2V0a2V5IiBgKCogKiAsc2l6ZV90KSkpCisK
KyhkZWZpbmUgKGNpcGhlci1zZXRrZXkgY2lwaGVyIGtleSkKKyAgIlNldCB0aGUgS0VZIG9u
IDxjaXBoZXI+IG9iamVjdCBDSVBIRVIKKworSW4gb3VyIGNhc2UsIEtFWSBpcyBlaXRoZXIg
YSBzdHJpbmcgb3IgYSBieXRldmVjdG9yLiIKKyAgKGxldCogKChrZXkgKG1hdGNoIGtleQor
ICAgICAgICAgICAgICAgICgoPyBieXRldmVjdG9yPyBrZXkpCisgICAgICAgICAgICAgICAg
IGtleSkKKyAgICAgICAgICAgICAgICAoKD8gc3RyaW5nPyBrZXkpCisgICAgICAgICAgICAg
ICAgIChzdHJpbmctPnV0Zjgga2V5KSkpKQorICAgICAgICAgKGVyciAoJWdjcnktY2lwaGVy
LXNldGtleSAoY2lwaGVyLT5wb2ludGVyIGNpcGhlcikKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGJ5dGV2ZWN0b3ItPnBvaW50ZXIga2V5KQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoYnl0ZXZlY3Rvci1sZW5ndGgga2V5KSkpKQorICAg
IChpZiAoPSBlcnIgMCkKKyAgICAgICAgI3QKKyAgICAgICAgKHRocm93ICdnY3J5LWVycm9y
ICdjaXBoZXItc2V0a2V5IGVycikpKSkKKworKGRlZmluZSAlZ2NyeS1jaXBoZXItc2V0aXYK
KyAgKGxpYmdjcnlwdC0+cHJvY2VkdXJlIGludCAiZ2NyeV9jaXBoZXJfc2V0aXYiIGAoKiAq
ICxzaXplX3QpKSkKKworKGRlZmluZSAoY2lwaGVyLXNldGl2IGNpcGhlciBpdikKKyAgIlNl
dCB0aGUgSVYgb24gPGNpcGhlcj4gb2JqZWN0IENJUEhFUgorCitJbiBvdXIgY2FzZSwgSVYg
aXMgZWl0aGVyIGEgc3RyaW5nIG9yIGEgYnl0ZXZlY3Rvci4iCisgIChsZXQqICgoaXYgKG1h
dGNoIGl2CisgICAgICAgICAgICAgICAoKD8gYnl0ZXZlY3Rvcj8gaXYpCisgICAgICAgICAg
ICAgICAgaXYpCisgICAgICAgICAgICAgICAoKD8gc3RyaW5nPyBpdikKKyAgICAgICAgICAg
ICAgICAoc3RyaW5nLT51dGY4IGl2KSkpKQorICAgICAgICAgKGVyciAoJWdjcnktY2lwaGVy
LXNldGl2IChjaXBoZXItPnBvaW50ZXIgY2lwaGVyKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChieXRldmVjdG9yLT5wb2ludGVyIGl2KQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChieXRldmVjdG9yLWxlbmd0aCBpdikpKSkKKyAgICAoaWYg
KD0gZXJyIDApCisgICAgICAgICN0CisgICAgICAgICh0aHJvdyAnZ2NyeS1lcnJvciAnY2lw
aGVyLXNldGl2IGVycikpKSkKKworKGRlZmluZSAlZ2NyeS1jaXBoZXItc2V0Y3RyCisgIChs
aWJnY3J5cHQtPnByb2NlZHVyZSBpbnQgImdjcnlfY2lwaGVyX3NldGN0ciIgYCgqICogLHNp
emVfdCkpKQorCisoZGVmaW5lIChjaXBoZXItc2V0Y3RyIGNpcGhlciBjdHIpCisgICJTZXQg
dGhlIENUUiBvbiA8Y2lwaGVyPiBvYmplY3QgQ0lQSEVSCisKK0luIG91ciBjYXNlLCBDVFIg
aXMgZWl0aGVyIGEgc3RyaW5nIG9yIGEgYnl0ZXZlY3Rvci4iCisgIChsZXQqICgoY3RyICht
YXRjaCBjdHIKKyAgICAgICAgICAgICAgICAoKD8gYnl0ZXZlY3Rvcj8gY3RyKQorICAgICAg
ICAgICAgICAgICBjdHIpCisgICAgICAgICAgICAgICAgKCg/IHN0cmluZz8gY3RyKQorICAg
ICAgICAgICAgICAgICAoc3RyaW5nLT51dGY4IGN0cikpKSkKKyAgICAgICAgIChlcnIgKCVn
Y3J5LWNpcGhlci1zZXRjdHIgKGNpcGhlci0+cG9pbnRlciBjaXBoZXIpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChieXRldmVjdG9yLT5wb2ludGVyIGN0cikKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ5dGV2ZWN0b3ItbGVuZ3RoIGN0
cikpKSkKKyAgICAoaWYgKD0gZXJyIDApCisgICAgICAgICN0CisgICAgICAgICh0aHJvdyAn
Z2NyeS1lcnJvciAnY2lwaGVyLXNldGN0ciBlcnIpKSkpCisKKyhkZWZpbmUgJWdjcnktY2lw
aGVyLWNsb3NlCisgIChsaWJnY3J5cHQtPnByb2NlZHVyZSB2b2lkCisgICAgICAgICAgICAg
ICAgICAgICAgICAiZ2NyeV9jaXBoZXJfY2xvc2UiCisgICAgICAgICAgICAgICAgICAgICAg
ICA7OyBnY3J5X2NpcGhlcl9oZF90IEgKKyAgICAgICAgICAgICAgICAgICAgICAgICcoKikp
KQorCisoZGVmaW5lIChjaXBoZXItY2xvc2UgY2lwaGVyKQorICAiUmVsZWFzZSBhbGwgcmVz
b3VyY2VzIG9mIENJUEhFUi4KKworUnVubmluZyB0aGlzIG9uIGFuIGFscmVhZHkgY2xvc2Vk
IDxjaXBoZXI+IG1pZ2h0IHNlZ2ZhdWx0IDopIgorICAoJWdjcnktY2lwaGVyLWNsb3NlIChj
aXBoZXItPnBvaW50ZXIgY2lwaGVyKSkpCisKKyhkZWZpbmUgJWdjcnktY2lwaGVyLWVuY3J5
cHQKKyAgKGxpYmdjcnlwdC0+cHJvY2VkdXJlIGludAorICAgICAgICAgICAgICAgICAgICAg
ICAgImdjcnlfY2lwaGVyX2VuY3J5cHQiCisgICAgICAgICAgICAgICAgICAgICAgICA7OyBn
Y3J5X2NpcGhlcl9oZF90LCB1Y2hhciogb3V0LCBzaXplX3Qgb3V0c2l6ZQorICAgICAgICAg
ICAgICAgICAgICAgICAgOzsgY29uc3QgdWNoYXIqIGluLCBzaXplX3QgaW5sZW4KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGAoKiAqICxzaXplX3QgKiAsc2l6ZV90KSkpCisKKyhkZWZp
bmUgKGNpcGhlci1lbmNyeXB0IGNpcGhlciBvYmopCisgICJSdW5zIGEgcHJlcGFyZWQgY2lw
aGVyIHRvIGVuY3J5cHQgZGF0YS4gUGFkIHlvdXIgcGxhaW50ZXh0IGlmIHVzaW5nIGEgbm9u
LXN0cmVhbSBjaXBoZXIgbW9kZS4iCisgIChsZXQqICgoYnYgKG1hdGNoIG9iagorICAgICAg
ICAgICAgICAgKCg/IGJ5dGV2ZWN0b3I/IG9iaikKKyAgICAgICAgICAgICAgICAoYnl0ZXZl
Y3Rvci1jb3B5IG9iaikpCisgICAgICAgICAgICAgICAoKD8gc3RyaW5nPyBvYmopCisgICAg
ICAgICAgICAgICAgKHN0cmluZy0+dXRmOCBvYmopKSkpCisgICAgICAgICAoZXJyICglZ2Ny
eS1jaXBoZXItZW5jcnlwdCAoY2lwaGVyLT5wb2ludGVyIGNpcGhlcikKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChieXRldmVjdG9yLT5wb2ludGVyIGJ2KQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ5dGV2ZWN0b3ItbGVuZ3RoIGJ2
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJW51bGwtcG9pbnRlcgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkpKQorICAgIChpZiAoPSBl
cnIgMCkKKyAgICAgICAgYnYKKyAgICAgICAgKHRocm93ICdnY3J5LWVycm9yICdjaXBoZXIt
ZW5jcnlwdCBlcnIpKSkpCisKKyhkZWZpbmUgJWdjcnktY2lwaGVyLWRlY3J5cHQKKyAgKGxp
YmdjcnlwdC0+cHJvY2VkdXJlIGludAorICAgICAgICAgICAgICAgICAgICAgICAgImdjcnlf
Y2lwaGVyX2RlY3J5cHQiCisgICAgICAgICAgICAgICAgICAgICAgICA7OyBnY3J5X2NpcGhl
cl9oZF90LCB1Y2hhciogb3V0LCBzaXplX3Qgb3V0c2l6ZQorICAgICAgICAgICAgICAgICAg
ICAgICAgOzsgY29uc3QgdWNoYXIqIGluLCBzaXplX3QgaW5sZW4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGAoKiAqICxzaXplX3QgKiAsc2l6ZV90KSkpCisKKyhkZWZpbmUgKGNpcGhl
ci1kZWNyeXB0IGNpcGhlciBvYmopCisgICJSdW5zIGEgcHJlcGFyZWQgY2lwaGVyIHRvIGRl
Y3J5cHQgZGF0YS4iCisgIChsZXQqICgoYnYgKG1hdGNoIG9iagorICAgICAgICAgICAgICAg
KCg/IGJ5dGV2ZWN0b3I/IG9iaikKKyAgICAgICAgICAgICAgICAoYnl0ZXZlY3Rvci1jb3B5
IG9iaikpCisgICAgICAgICAgICAgICAoKD8gc3RyaW5nPyBvYmopCisgICAgICAgICAgICAg
ICAgKHN0cmluZy0+dXRmOCBvYmopKSkpCisgICAgICAgICAoZXJyICglZ2NyeS1jaXBoZXIt
ZGVjcnlwdCAoY2lwaGVyLT5wb2ludGVyIGNpcGhlcikKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChieXRldmVjdG9yLT5wb2ludGVyIGJ2KQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGJ5dGV2ZWN0b3ItbGVuZ3RoIGJ2KQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJW51bGwtcG9pbnRlcgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkpKQorICAgIChpZiAoPSBlcnIgMCkKKyAg
ICAgICAgYnYKKyAgICAgICAgKHRocm93ICdnY3J5LWVycm9yICdjaXBoZXItZGVjcnlwdCBl
cnIpKSkpCisKKyhkZWZpbmUgJWdjcnktY2lwaGVyLWF1dGhlbnRpY2F0ZQorICAobGliZ2Ny
eXB0LT5wcm9jZWR1cmUgaW50CisgICAgICAgICAgICAgICAgICAgICAgICAiZ2NyeV9jaXBo
ZXJfYXV0aGVudGljYXRlIgorICAgICAgICAgICAgICAgICAgICAgICAgOzsgZ2NyeV9jaXBo
ZXJfaGRfdCBoLCBjb25zdCB2b2lkICphYnVmLCBzaXplX3QgYWJ1ZmxlbgorICAgICAgICAg
ICAgICAgICAgICAgICAgJygqICogLHNpemVfdCkpKQorCisoZGVmaW5lIChjaXBoZXItYXV0
aGVudGljYXRlIGNpcGhlciBvYmopCisgICJQcm9jZXNzIGFkZGl0aW9uYWwgYXV0aGVudGlj
YXRlZCBkYXRhIChBQUQpLCBBRUFEIGNpcGhlciBtb2RlcyBvbmx5LiIKKyAgKGxldCogKChi
diAobWF0Y2ggb2JqCisgICAgICAgICAgICAgICAoKD8gYnl0ZXZlY3Rvcj8gb2JqKQorICAg
ICAgICAgICAgICAgIG9iaikKKyAgICAgICAgICAgICAgICgoPyBzdHJpbmc/IG9iaikKKyAg
ICAgICAgICAgICAgICAoc3RyaW5nLT51dGY4IG9iaikpKSkKKyAgICAgICAgIChlcnIgKCVn
Y3J5LWNpcGhlci1hdXRoZW50aWNhdGUgKGNpcGhlci0+cG9pbnRlciBjaXBoZXIpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChieXRldmVjdG9yLT5wb2lu
dGVyIGJ2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnl0
ZXZlY3Rvci1sZW5ndGggYnYpKSkpCisgICAgKGlmICg9IGVyciAwKQorICAgICAgICAjdAor
ICAgICAgICAodGhyb3cgJ2djcnktZXJyb3IgJ2NpcGhlci1hdXRoZW50aWNhdGUgZXJyKSkp
KQorCis7OyAoZGVmaW5lICVnY3J5Y3RsLWdldC10YWdsZW4gNzYpCis7OyAoZGVmaW5lICVn
Y3J5LWNpcGhlci1pbmZvCis7OyAgIChsaWJnY3J5cHQtPnByb2NlZHVyZSBpbnQKKzs7ICAg
ICAgICAgICAgICAgICAgICAgICAgICJnY3J5X2NpcGhlcl9pbmZvIgorOzsgICAgICAgICAg
ICAgICAgICAgICAgICAgOzsgZ2NyeV9jaXBoZXJfaGRfdCBoLCBpbnQgd2hhdCwgdm9pZCAq
YnVmZmVyLCBzaXplX3QgKm5ieXRlcworOzsgICAgICAgICAgICAgICAgICAgICAgICAgJygq
ICxpbnQgKiAsc2l6ZV90KSkpCisKKzs7IChkZWZpbmUgJWdjcnktY2lwaGVyLWdldHRhZwor
OzsgICAobGliZ2NyeXB0LT5wcm9jZWR1cmUgaW50Cis7OyAgICAgICAgICAgICAgICAgICAg
ICAgICAiZ2NyeV9jaXBoZXJfZ2V0dGFnIgorOzsgICAgICAgICAgICAgICAgICAgICAgICAg
OzsgZ2NyeV9jaXBoZXJfaGRfdCBoLCB2b2lkICp0YWcsIHNpemVfdCB0YWdsZW4KKzs7ICAg
ICAgICAgICAgICAgICAgICAgICAgICcoKiAqICxzaXplX3QpKSkKKworOzsgKGRlZmluZSAo
Y2lwaGVyLWdldC10YWcgY2lwaGVyKQorOzsgICAiUmV0cmlldmUgdGhlIHRhZyBhZnRlciBl
bmNyeXB0aW5nIGRhdGEgd2l0aCBhbiBBRUFEIGNpcGhlciBtb2RlLiIKKzs7ICAgKGxldCog
KAorOzsgICAgICAgICAgKHRhZy1sZW4tYnYgKG1ha2UtYnl0ZXZlY3RvciAoc2l6ZW9mIHNp
emVfdCkgMCkpCis7OyAgICAgICAgICAodGFnLWxlbi1lcnIgKCVnY3J5LWNpcGhlci1pbmZv
IGNpcGhlcgorOzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAl
Z2NyeWN0bC1nZXQtdGFnbGVuCis7OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICVudWxsLXBvaW50ZXIKKzs7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGJ5dGV2ZWN0b3ItPnBvaW50ZXIgdGFnLWxlbi1idikpKQorOzsg
ICAgICAgICAgKGJ2LWxlbiAoYnl0ZXZlY3Rvci11aW50LXJlZiB0YWctbGVuLWJ2IDAgKG5h
dGl2ZS1lbmRpYW5uZXNzKSAoc2l6ZW9mIHNpemVfdCkpKQorOzsgICAgICAgICAgKGJ2LWxl
biAxNikKKzs7ICAgICAgICAgIChidiAobWFrZS1ieXRldmVjdG9yIGJ2LWxlbikpCis7OyAg
ICAgICAgICAoZXJyICglZ2NyeS1jaXBoZXItZ2V0dGFnIChjaXBoZXItPnBvaW50ZXIgY2lw
aGVyKQorOzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnl0ZXZlY3Rv
ci0+cG9pbnRlciBidikKKzs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnYtbGVuKSkpCis7OyAgICAgKGlmICg9IGVyciAwKQorOzsgICAgICAgICBidgorOzsgICAg
ICAgICAodGhyb3cgJ2djcnktZXJyb3IgJ2NpcGhlci1nZXQtdGFnIGVycikpKSkKKworOzsg
KGRlZmluZSAlZ2NyeS1jaXBoZXItY2hlY2t0YWcKKzs7ICAgKGxpYmdjcnlwdC0+cHJvY2Vk
dXJlIGludAorOzsgICAgICAgICAgICAgICAgICAgICAgICAgImdjcnlfY2lwaGVyX2NoZWNr
dGFnIgorOzsgICAgICAgICAgICAgICAgICAgICAgICAgOzsgZ2NyeV9jaXBoZXJfaGRfdCBo
LCBjb25zdCB2b2lkICp0YWcsIHNpemVfdCB0YWdsZW4KKzs7ICAgICAgICAgICAgICAgICAg
ICAgICAgICcoKiAqIHNpemVfdCkpKQorCis7OyAoZGVmaW5lICVncGctZXJyLWNoZWNrc3Vt
IDEwKQorCis7OyAoZGVmaW5lIChjaXBoZXItY2hlY2stdGFnIGNpcGhlciBvYmopCis7OyAg
ICJDb21wYXJlIHRoZSB0YWcgdG8gdGhlIHRhZyBjb21wdXRlZCB3aGlsZSBkZWNyeXB0aW5n
IGEgY2lwaGVydGV4dC4gQUVBRCBjaXBoZXIgbW9kZXMgb25seS4iCis7OyAgIChsZXQqICgo
YnYgKG1hdGNoIG9iagorOzsgICAgICAgICAgICAgICAgKCg/IGJ5dGV2ZWN0b3I/IG9iaikK
Kzs7ICAgICAgICAgICAgICAgICBvYmopCis7OyAgICAgICAgICAgICAgICAoKD8gc3RyaW5n
PyBvYmopCis7OyAgICAgICAgICAgICAgICAgKHN0cmluZy0+dXRmOCBvYmopKSkpCis7OyAg
ICAgICAgICAoZXJyICglZ2NyeS1jaXBoZXItY2hlY2t0YWcgKGNpcGhlci0+cG9pbnRlciBj
aXBoZXIpCis7OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ5dGV2
ZWN0b3ItPnBvaW50ZXIgYnYpCis7OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGJ5dGV2ZWN0b3ItbGVuZ3RoIGJ2KSkpKQorOzsgICAgIChpZiAoPSBlcnIgMCkK
Kzs7ICAgICAgICAgI3QKKzs7ICAgICAgICAgKGlmICg9IGVyciAlZ3BnLWVyci1jaGVja3N1
bSkKKzs7ICAgICAgICAgICAgICNmCis7OyAgICAgICAgICAgICAodGhyb3cgJ2djcnktZXJy
b3IgJ2NpcGhlci1jaGVjay10YWcgZXJyKSkpKSkKKworOzsgKGRlZmluZSAlZ2NyeS1jaXBo
ZXItc2V0LWRlY3J5cHRpb24tdGFnCis7OyAgIDs7IE5lZWRlZCBmb3IgU0lWIGFuZCBHQ00t
U0lWCis7OyAgIChsaWJnY3J5cHQtPnByb2NlZHVyZSBpbnQKKzs7ICAgICAgICAgICAgICAg
ICAgICAgICAgICJnY3J5X2NpcGhlcl9zZXRfZGVjcnlwdGlvbl90YWciCis7OyAgICAgICAg
ICAgICAgICAgICAgICAgICA7OyBnY3J5X2NpcGhlcl9oZF90IGgsIGNvbnN0IHZvaWQgKnRh
Zywgc2l6ZV90IHRhZ2xlbgorOzsgICAgICAgICAgICAgICAgICAgICAgICAgYCgqICogLHNp
emVfdCkKKzs7ICAgICAgICAgICAgICAgICAgICAgICAgICkpCisKKzs7IChkZWZpbmUgKGNp
cGhlci1zZXQtZGVjcnlwdGlvbi10YWcgY2lwaGVyIG9iaikKKzs7ICAgIlVzZSBvbmx5IGZv
ciBTSVYgYW5kIEdDTS1TSVYgbW9kZXMuIEZvciBvdGhlciBtb2RlcywgdXNlIGBfY2hlY2t0
YWcnLiIKKzs7ICAgKGxldCogKChidiAobWF0Y2ggb2JqCis7OyAgICAgICAgICAgICAgICAo
KD8gYnl0ZXZlY3Rvcj8gb2JqKQorOzsgICAgICAgICAgICAgICAgIG9iaikKKzs7ICAgICAg
ICAgICAgICAgICgoPyBzdHJpbmc/IG9iaikKKzs7ICAgICAgICAgICAgICAgICAoc3RyaW5n
LT51dGY4IG9iaikpKSkKKzs7ICAgICAgICAgIChlcnIgKCVnY3J5LWNpcGhlci1zZXQtZGVj
cnlwdGlvbi10YWcgKGNpcGhlci0+cG9pbnRlciBjaXBoZXIpCis7OyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChieXRldmVjdG9yLT5wb2ludGVy
IGJ2KQorOzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoYnl0ZXZlY3Rvci1sZW5ndGggYnYpKSkpCis7OyAgICAgKGlmICg9IGVyciAwKQorOzsg
ICAgICAgICAjdAorOzsgICAgICAgICAodGhyb3cgJ2djcnktZXJyb3IgJ2NpcGhlci1zZXQt
ZGVjcnlwdGlvbi10YWcgZXJyKSkpKQorCisoZGVmaW5lKiAoZW5jcnlwdCBhbGdvcml0aG0g
bW9kZSBrZXkgaXYgcGxhaW50ZXh0ICM6a2V5IChjdHIgI2YpKQorICAiRW5jcnlwdCBkYXRh
IHVzaW5nIHRoZSBzcGVjaWZpZWQgYWxnb3JpdGhtLCBtb2RlLCBrZXksIGFuZCBJVi4KKwor
UGFkIHlvdXIgcGxhaW50ZXh0IGlmIHRoZSBtb2RlIHJlcXVpcmVzIGl0IQorUmV0dXJucyBh
IGJ5dGV2ZWN0b3Igd2l0aCB0aGUgY2lwaGVydGV4dC4iCisgIChsZXQgKChjaXBoZXIgKGNp
cGhlci1vcGVuIGFsZ29yaXRobSBtb2RlKSkpCisgICAgKGNpcGhlci1zZXRrZXkgY2lwaGVy
IGtleSkKKyAgICAoaWYgY3RyCisgICAgICAgIChjaXBoZXItc2V0Y3RyIGNpcGhlciBpdikK
KyAgICAgICAgKGNpcGhlci1zZXRpdiBjaXBoZXIgaXYpKQorICAgIChsZXQgKChjaXBoZXJ0
ZXh0IChjaXBoZXItZW5jcnlwdCBjaXBoZXIgcGxhaW50ZXh0KSkpCisgICAgICAoY2lwaGVy
LWNsb3NlIGNpcGhlcikKKyAgICAgIGNpcGhlcnRleHQpKSkKKworOzsgKGRlZmluZSogKGVu
Y3J5cHQtYWVhZCBhbGdvcml0aG0gbW9kZSBrZXkgaXYgcGxhaW50ZXh0ICM6a2V5IChhYWQg
I2YpIChjdHIgI2YpKQorOzsgICAiRW5jcnlwdCBkYXRhIHVzaW5nIHRoZSBzcGVjaWZpZWQg
YWxnb3JpdGhtLCBtb2RlLCBrZXksIGFuZCBJVi4KKworOzsgUGFkIHlvdXIgcGxhaW50ZXh0
IGlmIHRoZSBtb2RlIHJlcXVpcmVzIGl0IQorOzsgUmV0dXJucyBgKGNpcGhlcnRleHQgLiB0
YWcpJy4iCis7OyAgIChsZXQgKChjaXBoZXIgKGNpcGhlci1vcGVuIGFsZ29yaXRobSBtb2Rl
KSkpCis7OyAgICAgKGNpcGhlci1zZXRrZXkgY2lwaGVyIGtleSkKKzs7ICAgICAoaWYgY3Ry
Cis7OyAgICAgICAgIChjaXBoZXItc2V0Y3RyIGNpcGhlciBjdHIpCis7OyAgICAgICAgIChj
aXBoZXItc2V0aXYgY2lwaGVyIGl2KSkKKzs7ICAgICAoaWYgYWFkIChjaXBoZXItYXV0aGVu
dGljYXRlIGNpcGhlciBhYWQpKQorOzsgICAgIChsZXQgKChjaXBoZXJ0ZXh0LXRhZyAoY29u
cyAoY2lwaGVyLWVuY3J5cHQgY2lwaGVyIHBsYWludGV4dCkKKzs7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGNpcGhlci1nZXQtdGFnIGNpcGhlcikpKSkKKzs7ICAgICAg
IChjaXBoZXItY2xvc2UgY2lwaGVyKQorOzsgICAgICAgY2lwaGVydGV4dC10YWcpKSkKKwor
KGRlZmluZSogKGRlY3J5cHQgYWxnb3JpdGhtIG1vZGUga2V5IGl2IGNpcGhlcnRleHQgIzpr
ZXkgKGN0ciAjZikpCisgICJEZWNyeXB0IGRhdGEgdXNpbmcgdGhlIHNwZWNpZmllZCBhbGdv
cml0aG0sIG1vZGUsIGtleSwgYW5kIElWLgorCitSZXR1cm5zIGEgYnl0ZXZlY3RvciB3aXRo
IHRoZSBwbGFpbnRleHQuIgorICAobGV0ICgoY2lwaGVyIChjaXBoZXItb3BlbiBhbGdvcml0
aG0gbW9kZSkpKQorICAgIChjaXBoZXItc2V0a2V5IGNpcGhlciBrZXkpCisgICAgKGlmIGN0
cgorICAgICAgICAoY2lwaGVyLXNldGN0ciBjaXBoZXIgaXYpCisgICAgICAgIChjaXBoZXIt
c2V0aXYgY2lwaGVyIGl2KSkKKyAgICAobGV0ICgocGxhaW50ZXh0IChjaXBoZXItZGVjcnlw
dCBjaXBoZXIgY2lwaGVydGV4dCkpKQorICAgICAgKGNpcGhlci1jbG9zZSBjaXBoZXIpCisg
ICAgICBwbGFpbnRleHQpKSkKKworOzsgKGRlZmluZSogKGRlY3J5cHQtYWVhZCBhbGdvcml0
aG0gbW9kZSBrZXkgaXYgY2lwaGVydGV4dCB0YWcgIzprZXkgKGFhZCAjZikgKGN0ciAjZikp
Cis7OyAgICJEZWNyeXB0IGRhdGEgdXNpbmcgdGhlIHNwZWNpZmllZCBhbGdvcml0aG0sIG1v
ZGUsIGtleSwgYW5kIElWLgorCis7OyBSZXR1cm5zIGAocGxhaW50ZXh0IC4gdGFnLXZlcmlm
aWVkPyknLiIKKzs7ICAgKGxldCAoKGNpcGhlciAoY2lwaGVyLW9wZW4gYWxnb3JpdGhtIG1v
ZGUpKSkKKzs7ICAgICAoY2lwaGVyLXNldGtleSBjaXBoZXIga2V5KQorOzsgICAgIChpZiBj
dHIKKzs7ICAgICAgICAgKGNpcGhlci1zZXRjdHIgY2lwaGVyIGN0cikKKzs7ICAgICAgICAg
KGNpcGhlci1zZXRpdiBjaXBoZXIgaXYpKQorOzsgICAgIChpZiBhYWQgKGNpcGhlci1hdXRo
ZW50aWNhdGUgY2lwaGVyIGFhZCkpCis7OyAgICAgKGxldCAoKHBsYWludGV4dC10YWd2IChj
b25zIChjaXBoZXItZGVjcnlwdCBjaXBoZXIgY2lwaGVydGV4dCkKKzs7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKGNpcGhlci1jaGVjay10YWcgY2lwaGVyIHRhZykpKSkK
Kzs7ICAgICAgIChjaXBoZXItY2xvc2UgY2lwaGVyKQorOzsgICAgICAgcGxhaW50ZXh0LXRh
Z3YpKSkKZGlmZiAtLWdpdCBhL3Rlc3RzL2NpcGhlci5zY20gYi90ZXN0cy9jaXBoZXIuc2Nt
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2OTU3MjQKLS0tIC9kZXYv
bnVsbAorKysgYi90ZXN0cy9jaXBoZXIuc2NtCkBAIC0wLDAgKzEsNjggQEAKKzs7OyBndWls
ZS1nY3J5cHQgLS0tIGNyeXB0byB0b29saW5nIGZvciBndWlsZQorOzs7IENvcHlyaWdodCDC
qSAyMDI2IFNhYWQgUmhvdWxhbSA8c2FhZEByaG91bGFtLnRlY2g+Cis7OzsKKzs7OyBUaGlz
IGZpbGUgaXMgcGFydCBvZiBndWlsZS1nY3J5cHQuCis7OzsKKzs7OyBndWlsZS1nY3J5cHQg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCis7Ozsg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCis7OzsgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YKKzs7OyB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKzs7OworOzs7IGd1aWxlLWdjcnlw
dCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBi
dXQKKzs7OyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCis7OzsgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKzs7OyBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorOzs7Cis7OzsgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCis7OzsgYWxvbmcgd2l0aCBndWlsZS1nY3J5cHQuICBJZiBub3QsIHNlZSA8aHR0cDov
L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyhkZWZpbmUtbW9kdWxlICh0ZXN0LW1hYykK
KyAgIzp1c2UtbW9kdWxlIChybnJzIGJ5dGV2ZWN0b3JzKQorICAjOnVzZS1tb2R1bGUgKHNy
Zmkgc3JmaS02NCkKKyAgIzp1c2UtbW9kdWxlIChnY3J5cHQgY2lwaGVyKQorICAjOnVzZS1t
b2R1bGUgKGdjcnlwdCByYW5kb20pKQorCisodGVzdC1iZWdpbiAiY2lwaGVyIikKKworKHRl
c3QtZXF1YWwgImxvb2t1cC1jaXBoZXItYWxnb3JpdGhtIgorICAoY2lwaGVyLWFsZ29yaXRo
bSBhZXMxMjgpCisgIChsb29rdXAtY2lwaGVyLWFsZ29yaXRobSAnYWVzMTI4KSkKKworKHRl
c3QtZXF1YWwgImxvb2t1cC1jaXBoZXItbW9kZSIKKyAgKGNpcGhlci1tb2RlIGdjbSkKKyAg
KGxvb2t1cC1jaXBoZXItbW9kZSAnZ2NtKSkKKworKHRlc3QtZXEgImNpcGhlci1hbGdvcml0
aG0tbmFtZSIKKyAgJ2FlczEyOAorICAoY2lwaGVyLWFsZ29yaXRobS1uYW1lIChjaXBoZXIt
YWxnb3JpdGhtIGFlczEyOCkpKQorCisodGVzdC1lcSAiY2lwaGVyLW1vZGUtbmFtZSIKKyAg
J2djbQorICAoY2lwaGVyLW1vZGUtbmFtZSAoY2lwaGVyLW1vZGUgZ2NtKSkpCisKKyh0ZXN0
LWVxdWFsICJjaXBoZXIta2V5LXNpemUiCisgIChsaXN0IDE2IDI0IDMyKQorICAobWFwIGNp
cGhlci1rZXktc2l6ZQorICAgICAgIChsaXN0IChjaXBoZXItYWxnb3JpdGhtIGFlczEyOCkK
KyAgICAgICAgICAgICAoY2lwaGVyLWFsZ29yaXRobSBhZXMxOTIpCisgICAgICAgICAgICAg
KGNpcGhlci1hbGdvcml0aG0gYWVzMjU2KSkpKQorCisoZGVmaW5lIHRlc3Qta2V5IChnZW4t
cmFuZG9tLWJ2IDE2KSkKKyhkZWZpbmUgdGVzdC1pdiAoZ2VuLXJhbmRvbS1idiAxNikpCiso
ZGVmaW5lIHRlc3QtYWFkIChnZW4tcmFuZG9tLWJ2IDgpKQorCisobGV0KiAoKGN0IChlbmNy
eXB0IChjaXBoZXItYWxnb3JpdGhtIGFlczEyOCkgKGNpcGhlci1tb2RlIGNiYykgdGVzdC1r
ZXkgdGVzdC1pdiAic2l4dGVlbmNoYXJhY3RlciIpKSkKKyAgOzsgU2hvdWxkIGJlIGEgYnl0
ZXZlY3RvcgorICAodGVzdC1hc3NlcnQgKGJ5dGV2ZWN0b3I/IGN0KSkKKyAgOzsgRGVjcnlw
dHMgdG8gb3JpZ2luYWwgcGxhaW50ZXh0CisgICh0ZXN0LWFzc2VydCAoZXF1YWw/IChzdHJp
bmctPnV0ZjggInNpeHRlZW5jaGFyYWN0ZXIiKSAoZGVjcnlwdCAoY2lwaGVyLWFsZ29yaXRo
bSBhZXMxMjgpIChjaXBoZXItbW9kZSBjYmMpIHRlc3Qta2V5IHRlc3QtaXYgY3QpKSkKKyAg
OzsgV3JvbmcgYWxnb3JpdGhtIGZhaWxzCisgICh0ZXN0LWFzc2VydCAobm90IChlcXVhbD8g
InNpeHRlZW5jaGFyYWN0ZXIiIChkZWNyeXB0IChjaXBoZXItYWxnb3JpdGhtIHNlcnBlbnQx
MjgpIChjaXBoZXItbW9kZSBjYmMpIHRlc3Qta2V5IHRlc3QtaXYgY3QpKSkpCisgIDs7IFdy
b25nIG1vZGUgZmFpbHMKKyAgKHRlc3QtYXNzZXJ0IChub3QgKGVxdWFsPyBjdCAoZW5jcnlw
dCAoY2lwaGVyLWFsZ29yaXRobSBhZXMxMjgpIChjaXBoZXItbW9kZSBjdHIpIHRlc3Qta2V5
IHRlc3QtaXYgInNpeHRlZW5jaGFyYWN0ZXIiICM6Y3RyICN0KSkpKQorICA7OyBTaG91bGQg
ZXF1YWwgYSByZS1ydW4gb2YgaXRzZWxmCisgICh0ZXN0LWVxdWFsIGN0IChlbmNyeXB0IChj
aXBoZXItYWxnb3JpdGhtIGFlczEyOCkgKGNpcGhlci1tb2RlIGNiYykgdGVzdC1rZXkgdGVz
dC1pdiAic2l4dGVlbmNoYXJhY3RlciIpKQorICA7OyBTaG91bGRuJ3QgZXF1YWwgc29tZXRo
aW5nIGRpZmZlcmVudAorICAodGVzdC1hc3NlcnQgKG5vdCAoZXF1YWw/IGN0IChlbmNyeXB0
IChjaXBoZXItYWxnb3JpdGhtIGFlczEyOCkgKGNpcGhlci1tb2RlIGNiYykgdGVzdC1rZXkg
dGVzdC1pdiAiZmlsdGh5Y2FyaWNhdHVyZSIpKSkpKQorCisodGVzdC1lbmQgImNpcGhlciIp
Cg==

--------------0qiPjf1CZJfDkxEpGYjL60Au
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Gcrypt-devel mailing list
[email protected]
https://lists.gnupg.org/mailman/listinfo/gcrypt-devel

--------------0qiPjf1CZJfDkxEpGYjL60Au--