From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 52C092118C50E for ; Mon, 12 Nov 2018 07:45:04 -0800 (PST) Subject: Re: [PATCH 02/11] libnvdimm/security: change clear text nvdimm keys to encrypted keys References: <154180093865.70506.6858789591063128903.stgit@djiang5-desk3.ch.intel.com> <154180163666.70506.8805433934495072699.stgit@djiang5-desk3.ch.intel.com> <1541957268.3734.53.camel@linux.ibm.com> From: Dave Jiang Message-ID: <1cc6edd6-8926-1be1-04f3-85ce59bfdfb4@intel.com> Date: Mon, 12 Nov 2018 08:45:03 -0700 MIME-Version: 1.0 In-Reply-To: <1541957268.3734.53.camel@linux.ibm.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: linux-nvdimm-bounces@lists.01.org Sender: "Linux-nvdimm" To: Mimi Zohar , dan.j.williams@intel.com, zohar@linux.vnet.ibm.com Cc: linux-nvdimm@lists.01.org List-ID: Ck9uIDExLzExLzIwMTggMTA6MjcgQU0sIE1pbWkgWm9oYXIgd3JvdGU6Cj4gT24gRnJpLCAyMDE4 LTExLTA5IGF0IDE1OjEzIC0wNzAwLCBEYXZlIEppYW5nIHdyb3RlOgo+PiBJbiBvcmRlciB0byBt YWtlIG52ZGltbSBtb3JlIHNlY3VyZSwgZW5jcnlwdGVkIGtleXMgd2lsbCBiZSB1c2VkIGluc3Rl YWQgb2YKPj4gY2xlYXIgdGV4dCBrZXlzLiBBIG1hc3RlciBrZXkgd2lsbCBiZSBjcmVhdGVkIHRv IHNlYWwgZW5jcnlwdGVkIG52ZGltbQo+PiBrZXlzLiBUaGUgbWFzdGVyIGtleSBjYW4gYmUgYSB0 cnVzdGVkIGtleSBnZW5lcmF0ZWQgZnJvbSBUUE0gMi4wIG9yIGEgbGVzcwo+PiBzZWN1cmUgdXNl ciBrZXkuCj4gVHJ1c3RlZCBrZXlzIGFsc28gd29yayBmb3IgVFBNIDEuMi4gwqBBcmUgeW91IGlu dGVudGlvbmFsbHkgbGltaXRpbmcKPiB0aGUgbWFzdGVyIGtleSB0byBUUE0gMi4wPwo+Cj4gVHJh ZGl0aW9uYWxseSB0aGVyZSBpcyBhIHNpbmdsZSBtYXN0ZXIga2V5IGZvciB0aGUgc3lzdGVtLCB3 aGljaCB3b3VsZAo+IGJlIHNlYWxlZCB0byBhIHNldCBvZiBib290IHRpbWUgUENSIHZhbHVlcy4g wqBBZnRlciBkZWNyeXB0aW5nIGFsbCBvZgo+IHRoZSBlbmNyeXB0ZWQga2V5cywgdGhlIG1hc3Rl ciBrZXkgd291bGQgYmUgcmVtb3ZlZCBmcm9tIHRoZSBrZXlyaW5nCj4gYW5kIGEgUENSIGV4dGVu ZGVkLiDCoEV4dGVuZGluZyBhIFBDUiB3b3VsZCBwcmV2ZW50IHRoZSBtYXN0ZXIga2V5IGZyb20K PiBiZWluZyB1bnNlYWxlZCBhZ2FpbiBhbmQgdXNlZCB0byBkZWNyeXB0IGVuY3J5cHRlZCBrZXlz LCB3aXRob3V0Cj4gcmVib290aW5nIHRoZSBzeXN0ZW0uIMKgTm9ybWFsbHkgdGhpcyB3b3VsZCBi ZSBkb25lIGJlZm9yZSBwaXZvdGluZwo+IHJvb3QuCj4KPiBJZiB5b3UncmUgbm90IHJlZmVycmlu ZyB0byB0aGUgc3lzdGVtIG1hc3RlciBrZXkgYW5kIGFyZSBpbnRlbnRpb25hbGx5Cj4gbGltaXRp bmcgdXNhZ2UgdG8gVFBNIDIuMCwgbW9yZSBkZXRhaWxzIG9uIHRoZSBtYXN0ZXIga2V5IHNlY3Vy aXR5Cj4gcmVxdWlyZW1lbnRzIHNob3VsZCBiZSBpbmNsdWRlZC4KPgo+IFVzaW5nIHRydXN0ZWQg a2V5cyB0aGF0IGFyZSBlbmNyeXB0ZWQvZGVjcnlwdGVkIHVzaW5nIGEgdXNlciBrZXkKPiBzaG91 bGQgcmVhbGx5IGJlIGxpbWl0ZWQgdG8gdGVzdGluZyBlbnZpcm9ubWVudHMuCgpEbyB5b3UgaGF2 ZSBhbnkgcmVjb21tZW5kYXRpb24gZm9yIHN5c3RlbXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBUUE0/ CgoKCj4KPj4gSW4gdGhlIHByb2Nlc3Mgb2YgdGhpcyBjb252ZXJzaW9uLCB0aGUga2VybmVsIGNh Y2hlZCBrZXkgd2lsbCBiZSByZW1vdmVkCj4+IGluIG9yZGVyIHRvIHNpbXBsaWZ5IHRoZSB2ZXJp ZmljYXRpb24gcHJvY2Vzcy4gVGhlIGhhcmR3YXJlIHdpbGwgYmUgdXNlZCB0bwo+PiB2ZXJpZnkg dGhlIGRlY3J5cHRlZCB1c2VyIHBheWxvYWQgZGlyZWN0bHkuCj4gTWFraW5nIHRoaXMgc29ydCBv ZiBjaGFuZ2UgaW1wbGllcyB0aGVyZSBpcyBubyBjb25jZXJuIGluIGJyZWFraW5nCj4gZXhpc3Rp bmcgdXNlcnNwYWNlLiDCoEVpdGhlciB0aGUgY29kZSBoYXNuJ3QgeWV0IGJlZW4gdXBzdHJlYW1l ZCBvcgo+IHRoZXJlIGFyZSBub3QgYW55IHVzZXJzLiBJZiB0aGUgY29kZSBoYXNuJ3QgYmVlbiB1 cHN0cmVhbWVkLCBpdCB3b3VsZAo+IG1ha2UgbW9yZSBzZW5zZSB0byBzcXVhc2ggdGhlIGdpdCBo aXN0b3J5Ogo+Cj4gLSBtYWtpbmcgY29kZSByZXZpZXcgZWFzaWVyCj4gLSBtYWtpbmcgdGhlIGdp dCBoaXN0b3J5IGJpc2VjdCBzYWZlCj4KPiBNaW1pCj4KPj4gU2lnbmVkLW9mZi1ieTogRGF2ZSBK aWFuZyA8ZGF2ZS5qaWFuZ0BpbnRlbC5jb20+Cj4+IC0tLQo+PiAgIERvY3VtZW50YXRpb24vbnZk aW1tL3NlY3VyaXR5LnR4dCB8ICAgMjkgKystCj4+ICAgZHJpdmVycy9udmRpbW0vZGltbS5jICAg ICAgICAgICAgIHwgICAgMwo+PiAgIGRyaXZlcnMvbnZkaW1tL2RpbW1fZGV2cy5jICAgICAgICB8 ICAgIDIKPj4gICBkcml2ZXJzL252ZGltbS9uZC1jb3JlLmggICAgICAgICAgfCAgICAzCj4+ICAg ZHJpdmVycy9udmRpbW0vbmQuaCAgICAgICAgICAgICAgIHwgICAgNSAtCj4+ICAgZHJpdmVycy9u dmRpbW0vc2VjdXJpdHkuYyAgICAgICAgIHwgIDMxNiArKysrKysrKysrLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCj4+ICAgNiBmaWxlcyBjaGFuZ2VkLCAxMDggaW5zZXJ0aW9ucygrKSwgMjUw IGRlbGV0aW9ucygtKQo+Pgo+PiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9udmRpbW0vc2Vj dXJpdHkudHh0IGIvRG9jdW1lbnRhdGlvbi9udmRpbW0vc2VjdXJpdHkudHh0Cj4+IGluZGV4IDUw Y2JiNmNiOTZhMS4uMTEyNDBjZTQ4NzU1IDEwMDY0NAo+PiAtLS0gYS9Eb2N1bWVudGF0aW9uL252 ZGltbS9zZWN1cml0eS50eHQKPj4gKysrIGIvRG9jdW1lbnRhdGlvbi9udmRpbW0vc2VjdXJpdHku dHh0Cj4+IEBAIC0zOSwzNCArMzksMzkgQEAgVGhlIERJTU0gaWQgd291bGQgYmUgcHJvdmlkZWQg YWxvbmcgd2l0aCB0aGUga2V5IHBheWxvYWQgKHBhc3NwaHJhc2UpIHRvCj4+ICAgdGhlIGtlcm5l bC4KPj4KPj4gICBUaGUgc2VjdXJpdHkga2V5cyBhcmUgbWFuYWdlZCBvbiB0aGUgYmFzaXMgb2Yg YSBzaW5nbGUga2V5IHBlciBESU1NLiBUaGUKPj4gLWtleSAicGFzc3BocmFzZSIgaXMgZXhwZWN0 ZWQgdG8gYmUgMzJieXRlcyBsb25nIG9yIHBhZGRlZCB0byAzMmJ5dGVzLiBUaGlzIGlzCj4+ICtr ZXkgInBhc3NwaHJhc2UiIGlzIGV4cGVjdGVkIHRvIGJlIDMyYnl0ZXMgbG9uZy4gVGhpcyBpcwo+ PiAgIHNpbWlsYXIgdG8gdGhlIEFUQSBzZWN1cml0eSBzcGVjaWZpY2F0aW9uIFsyXS4gQSBrZXkg aXMgaW5pdGlhbGx5IGFjcXVpcmVkCj4+ICAgdmlhIHRoZSByZXF1ZXN0X2tleSgpIGtlcm5lbCBB UEkgY2FsbCBhbmQgcmV0cmlldmVkIGZyb20gdXNlcnNwYWNlLiBJdCBpcyB1cCB0bwo+PiAgIHRo ZSB1c2VyIHRvIHByb3ZpZGUgYW4gdXBjYWxsIGFwcGxpY2F0aW9uIHRvIHJldHJpZXZlIHRoZSBr ZXkgaW4gd2hhdGV2ZXIKPj4gICBmYXNoaW9uIG1lZXRzIHRoZWlyIHNlY3VyaXR5IHJlcXVpcmVt ZW50cy4KPj4KPj4gLUEgbnZkaW1tIHVzZXIgbG9nb24ga2V5IGhhcyB0aGUgZGVzY3JpcHRpb24g Zm9ybWF0IG9mOgo+PiArQSBudmRpbW0gZW5jcnlwdGVkIGtleSBoYXMgdGhlIGRlc2NyaXB0aW9u IGZvcm1hdCBvZjoKPj4gICBudmRpbW06PGJ1cy1wcm92aWRlci1zcGVjaWZpYy11bmlxdWUtaWQ+ Cj4+Cj4+ICtTZWUgRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9rZXlzL3RydXN0ZWQtZW5jcnlwdGVk LnJzdCBmb3IgZGV0YWlscyBvbiBlbmNyeXB0ZWQKPj4gK2tleXMuIFRoZSBlbmNyeXB0ZWQga2V5 IGZvciB0aGUgRElNTSBpcyBnZW5lcmF0ZWQgZnJvbSBhIG1hc3RlciBrZXkgdGhhdCBpcwo+PiAr ZWl0aGVyIGEgdHJ1c3RlZCBrZXkgY3JlYXRlZCB2aWEgVFBNMiBvciBhIGxlc3Mgc2VjdXJlIHVz ZXIga2V5LiBUaGUgcGF5bG9hZAo+PiArZm9yIHRoZSBudmRpbW0gZW5jcnlwdGVkIGtleSBpcyBy YW5kb21seSBnZW5lcmF0ZWQgYnkgdGhlIGtlcm5lbCBhbmQgaXMgbm90Cj4+ICt2aXNpYmxlIHRv IHRoZSB1c2VyLiBUaGUgdXNlciBpcyByZXNwb25zaWJsZSBmb3IgcmV0YWluaW5nIHRoZSBlbmNy eXB0ZWQga2V5Cj4+ICtibG9iIGdlbmVyYXRlZCBmcm9tIHRoZSBlbmNyeXB0ZWQga2V5IHRvIGJl IGxvYWRlZCBhdCB0aGUgbmV4dCBib290IHNlc3Npb24uCj4+ICsKPj4gICA0LiBVbmxvY2tpbmcK Pj4gICAtLS0tLS0tLS0tLS0KPj4gICBXaGVuIHRoZSBESU1NcyBhcmUgYmVpbmcgZW51bWVyYXRl ZCBieSB0aGUga2VybmVsLCB0aGUga2VybmVsIHdpbGwgYXR0ZW1wdCB0bwo+PiAtcmV0cmlldmUg dGhlIGtleSBmcm9tIGl0cyBrZXlyaW5nLiBJZiB0aGF0IGZhaWxzLCBpdCB3aWxsIGF0dGVtcHQg dG8KPj4gICBhY3F1aXJlIHRoZSBrZXkgZnJvbSB0aGUgdXNlcnNwYWNlIHVwY2FsbCBmdW5jdGlv bi4gVGhpcyBpcyB0aGUgb25seSB0aW1lCj4+ICAgYSBsb2NrZWQgRElNTSBjYW4gYmUgdW5sb2Nr ZWQuIE9uY2UgdW5sb2NrZWQsIHRoZSBESU1NIHdpbGwgcmVtYWluIHVubG9ja2VkCj4+ICAgdW50 aWwgcmVib290Lgo+Pgo+PiAgIDUuIFVwZGF0ZQo+PiAgIC0tLS0tLS0tLQo+PiAtV2hlbiBkb2lu ZyBhbiB1cGRhdGUsIGl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIG5ldyBrZXkgd2l0aCB0aGUgNjRi aXQgcGF5bG9hZCBvZgo+PiAtZm9ybWF0IGRlc2NyaWJlZCBhYm92ZSBpcyBhZGRlZCB2aWEgdGhl IGtleXV0aWxzIEFQSSBvciB1dGlsaXR5LiBUaGUgdXBkYXRlCj4+IC1jb21tYW5kIHdyaXR0ZW4g dG8gdGhlIHN5c2ZzIGF0dHJpYnV0ZSB3aWxsIGJlIHdpdGggdGhlIGZvcm1hdDoKPj4gK1doZW4g ZG9pbmcgYW4gdXBkYXRlLCBpdCBpcyBleHBlY3RlZCB0aGF0IHRoZSBuZXcga2V5IGlzIGFkZGVk IHZpYSB0aGUKPj4gK2tleXV0aWxzIEFQSSBvciB1dGlsaXR5LiBUaGUgdXBkYXRlIGNvbW1hbmQg d3JpdHRlbiB0byB0aGUgc3lzZnMgYXR0cmlidXRlCj4+ICt3aWxsIGJlIHdpdGggdGhlIGZvcm1h dDoKPj4gICB1cGRhdGUgPG9sZCBrZXlpZD4gPG5ldyBrZXlpZD4KPj4KPj4gLUl0IGlzIGV4cGVj dGVkIHRoYXQgYSB1c2VyIGxvZ29uIGtleSBoYXMgYmVlbiBpbmplY3RlZCB2aWEga2V5dXRpbHMg dG8gcHJvdmlkZQo+PiAtdGhlIHBheWxvYWQgZm9yIHRoZSB1cGRhdGUgb3BlcmF0aW9uLiBUaGUg a2VybmVsIHdpbGwgdGFrZSB0aGUgbmV3IHVzZXIga2V5LAo+PiAtYXR0ZW1wdCB0aGUgdXBkYXRl IG9wZXJhdGlvbiB3aXRoIHRoZSBudmRpbW0sIGFuZCByZXBsYWNlIHRoZSBleGlzdGluZyBrZXkn cwo+PiAtcGF5bG9hZCB3aXRoIHRoZSBuZXcgcGFzc3BocmFzZS4KPj4gK0l0IGlzIGV4cGVjdGVk IHRoYXQgYSBlbmNyeXB0ZWQga2V5IGhhcyBiZWVuIGluamVjdGVkIHZpYSBrZXl1dGlscyB0byBw cm92aWRlCj4+ICt0aGUgcGF5bG9hZCBmb3IgdGhlIHVwZGF0ZSBvcGVyYXRpb24uIFRoZSBrZXJu ZWwgd2lsbCB0YWtlIHRoZSBuZXcgdXNlciBrZXkKPj4gK2FuZCB0aGUgb2xkIHVzZXIga2V5IHRv IGF0dGVtcHQgdGhlIHVwZGF0ZSBvcGVyYXRpb24uCj4+Cj4+ICAgSWYgdGhlcmUgaXMgbm8gb2xk IGtleSBpZCBkdWUgdG8gYSBzZWN1cml0eSBlbmFibGluZywgdGhlbiBhIDAgc2hvdWxkIGJlCj4+ ICAgcGFzc2VkIGluLiAgSWYgYSBudmRpbW0gaGFzIGFuIGV4aXN0aW5nIHBhc3NwaHJhc2UsIHRo ZW4gYW4gIm9sZCIga2V5IHNob3VsZAo+PiBAQCAtODAsNyArODUsNyBAQCBmcm96ZW4gYnkgYSB1 c2VyIHdpdGggcm9vdCBwcml2ZWxlZ2UuCj4+ICAgNy4gRGlzYWJsZQo+PiAgIC0tLS0tLS0tLS0K Pj4gICBUaGUgc2VjdXJpdHkgZGlzYWJsZSBjb21tYW5kIGZvcm1hdCBpczoKPj4gLWRpc2FibGUg PG9sZCBrZXlpZD4KPj4gK2Rpc2FibGUgPGN1cnJlbnQga2V5aWQ+Cj4+Cj4+ICAgQW4gIm9sZCIg a2V5IHdpdGggdGhlIHBhc3NwaHJhc2UgcGF5bG9hZCB0aGF0IGlzIHRpZWQgdG8gdGhlIG52ZGlt bSBzaG91bGQgYmUKPj4gICBpbmplY3RlZCB3aXRoIGEga2V5IGRlc2NyaXB0aW9uIHRoYXQgZG9l cyBub3QgaGF2ZSB0aGUgIm52ZGltbToiIHByZWZpeCBhbmQKPj4gQEAgLTg5LDcgKzk0LDcgQEAg aXRzIGtleWlkIHNob3VsZCBiZSBwYXNzZWQgaW4gdmlhIHN5c2ZzLgo+PiAgIDguIFNlY3VyZSBF cmFzZQo+PiAgIC0tLS0tLS0tLS0tLS0tLQo+PiAgIFRoZSBjb21tYW5kIGZvcm1hdCBmb3IgZG9p bmcgYSBzZWN1cmUgZXJhc2UgaXM6Cj4+IC1lcmFzZSA8b2xkIGtleWlkPgo+PiArZXJhc2UgPGN1 cnJlbnQga2V5aWQ+Cj4+Cj4+ICAgQW4gIm9sZCIga2V5IHdpdGggdGhlIHBhc3NwaHJhc2UgcGF5 bG9hZCB0aGF0IGlzIHRpZWQgdG8gdGhlIG52ZGltbSBzaG91bGQgYmUKPj4gICBpbmplY3RlZCB3 aXRoIGEga2V5IGRlc2NyaXB0aW9uIHRoYXQgZG9lcyBub3QgaGF2ZSB0aGUgIm52ZGltbToiIHBy ZWZpeCBhbmQKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZkaW1tL2RpbW0uYyBiL2RyaXZlcnMv bnZkaW1tL2RpbW0uYwo+PiBpbmRleCAyMjVhODQ3NGM0NGEuLmMzODg2YTIyYjVlNCAxMDA2NDQK Pj4gLS0tIGEvZHJpdmVycy9udmRpbW0vZGltbS5jCj4+ICsrKyBiL2RyaXZlcnMvbnZkaW1tL2Rp bW0uYwo+PiBAQCAtMTEyLDkgKzExMiw2IEBAIHN0YXRpYyBpbnQgbnZkaW1tX3Byb2JlKHN0cnVj dCBkZXZpY2UgKmRldikKPj4gICBzdGF0aWMgaW50IG52ZGltbV9yZW1vdmUoc3RydWN0IGRldmlj ZSAqZGV2KQo+PiAgIHsKPj4gICAJc3RydWN0IG52ZGltbV9kcnZkYXRhICpuZGQgPSBkZXZfZ2V0 X2RydmRhdGEoZGV2KTsKPj4gLQlzdHJ1Y3QgbnZkaW1tICpudmRpbW0gPSB0b19udmRpbW0oZGV2 KTsKPj4gLQo+PiAtCW52ZGltbV9zZWN1cml0eV9yZWxlYXNlKG52ZGltbSk7Cj4+Cj4+ICAgCWlm ICghbmRkKQo+PiAgIAkJcmV0dXJuIDA7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL252ZGltbS9k aW1tX2RldnMuYyBiL2RyaXZlcnMvbnZkaW1tL2RpbW1fZGV2cy5jCj4+IGluZGV4IDVkMzQyNTFj NGYzYi4uMjY5ZjQwMWE1ZTY4IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL252ZGltbS9kaW1tX2Rl dnMuYwo+PiArKysgYi9kcml2ZXJzL252ZGltbS9kaW1tX2RldnMuYwo+PiBAQCAtNDg1LDcgKzQ4 NSw3IEBAIHN0cnVjdCBudmRpbW0gKl9fbnZkaW1tX2NyZWF0ZShzdHJ1Y3QgbnZkaW1tX2J1cyAq bnZkaW1tX2J1cywgdm9pZCAqcHJvdmlkZXJfZGF0Cj4+ICAgCW52ZGltbS0+bnVtX2ZsdXNoID0g bnVtX2ZsdXNoOwo+PiAgIAludmRpbW0tPmZsdXNoX3dwcSA9IGZsdXNoX3dwcTsKPj4gICAJYXRv bWljX3NldCgmbnZkaW1tLT5idXN5LCAwKTsKPj4gLQltdXRleF9pbml0KCZudmRpbW0tPmtleV9t dXRleCk7Cj4+ICsJbXV0ZXhfaW5pdCgmbnZkaW1tLT5zZWNfbXV0ZXgpOwo+PiAgIAlkZXYgPSAm bnZkaW1tLT5kZXY7Cj4+ICAgCWRldl9zZXRfbmFtZShkZXYsICJubWVtJWQiLCBudmRpbW0tPmlk KTsKPj4gICAJZGV2LT5wYXJlbnQgPSAmbnZkaW1tX2J1cy0+ZGV2Owo+PiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9udmRpbW0vbmQtY29yZS5oIGIvZHJpdmVycy9udmRpbW0vbmQtY29yZS5oCj4+IGlu ZGV4IDZlMjg3Nzk5NmE5Yi4uY2ZiODdmNzFkYjhkIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL252 ZGltbS9uZC1jb3JlLmgKPj4gKysrIGIvZHJpdmVycy9udmRpbW0vbmQtY29yZS5oCj4+IEBAIC00 NSw4ICs0NSw3IEBAIHN0cnVjdCBudmRpbW0gewo+PiAgIAljb25zdCBjaGFyICpkaW1tX2lkOwo+ PiAgIAljb25zdCBzdHJ1Y3QgbnZkaW1tX3NlY3VyaXR5X29wcyAqc2VjdXJpdHlfb3BzOwo+PiAg IAllbnVtIG52ZGltbV9zZWN1cml0eV9zdGF0ZSBzdGF0ZTsKPj4gLQlzdHJ1Y3Qga2V5ICprZXk7 Cj4+IC0Jc3RydWN0IG11dGV4IGtleV9tdXRleDsKPj4gKwlzdHJ1Y3QgbXV0ZXggc2VjX211dGV4 Owo+PiAgIH07Cj4+Cj4+ICAgLyoqCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL252ZGltbS9uZC5o IGIvZHJpdmVycy9udmRpbW0vbmQuaAo+PiBpbmRleCA4OTJmMTI3YmZkMzguLmY4ZDhmMGEyYTQw ZCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9udmRpbW0vbmQuaAo+PiArKysgYi9kcml2ZXJzL252 ZGltbS9uZC5oCj4+IEBAIC00MjgsNyArNDI4LDYgQEAgYm9vbCBwbWVtX3Nob3VsZF9tYXBfcGFn ZXMoc3RydWN0IGRldmljZSAqZGV2KTsKPj4KPj4gICAjaWZkZWYgQ09ORklHX05WRElNTV9TRUNV UklUWQo+PiAgIGludCBudmRpbW1fc2VjdXJpdHlfdW5sb2NrX2RpbW0oc3RydWN0IG52ZGltbSAq bnZkaW1tKTsKPj4gLXZvaWQgbnZkaW1tX3NlY3VyaXR5X3JlbGVhc2Uoc3RydWN0IG52ZGltbSAq bnZkaW1tKTsKPj4gICBpbnQgbnZkaW1tX3NlY3VyaXR5X2dldF9zdGF0ZShzdHJ1Y3QgbnZkaW1t ICpudmRpbW0pOwo+PiAgIGludCBudmRpbW1fc2VjdXJpdHlfY2hhbmdlX2tleShzdHJ1Y3QgbnZk aW1tICpudmRpbW0sIHVuc2lnbmVkIGludCBvbGRfa2V5aWQsCj4+ICAgCQl1bnNpZ25lZCBpbnQg bmV3X2tleWlkKTsKPj4gQEAgLTQ0MSwxMCArNDQwLDYgQEAgc3RhdGljIGlubGluZSBpbnQgbnZk aW1tX3NlY3VyaXR5X3VubG9ja19kaW1tKHN0cnVjdCBudmRpbW0gKm52ZGltbSkKPj4gICAJcmV0 dXJuIDA7Cj4+ICAgfQo+Pgo+PiAtc3RhdGljIGlubGluZSB2b2lkIG52ZGltbV9zZWN1cml0eV9y ZWxlYXNlKHN0cnVjdCBudmRpbW0gKm52ZGltbSkKPj4gLXsKPj4gLX0KPj4gLQo+PiAgIHN0YXRp YyBpbmxpbmUgaW50IG52ZGltbV9zZWN1cml0eV9nZXRfc3RhdGUoc3RydWN0IG52ZGltbSAqbnZk aW1tKQo+PiAgIHsKPj4gICAJcmV0dXJuIC1FT1BOT1RTVVBQOwo+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9udmRpbW0vc2VjdXJpdHkuYyBiL2RyaXZlcnMvbnZkaW1tL3NlY3VyaXR5LmMKPj4gaW5k ZXggNWFhY2M1OTBiNGMwLi5lZTc0MTE5OWQ2MjMgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvbnZk aW1tL3NlY3VyaXR5LmMKPj4gKysrIGIvZHJpdmVycy9udmRpbW0vc2VjdXJpdHkuYwo+PiBAQCAt MTAsNDMgKzEwLDEwIEBACj4+ICAgI2luY2x1ZGUgPGxpbnV4L2tleS5oPgo+PiAgICNpbmNsdWRl IDxsaW51eC9rZXktdHlwZS5oPgo+PiAgICNpbmNsdWRlIDxrZXlzL3VzZXItdHlwZS5oPgo+PiAr I2luY2x1ZGUgPGtleXMvZW5jcnlwdGVkLXR5cGUuaD4KPj4gICAjaW5jbHVkZSAibmQtY29yZS5o Igo+PiAgICNpbmNsdWRlICJuZC5oIgo+Pgo+PiAtLyoKPj4gLSAqIFJlcGxhY2luZyB0aGUgdXNl ciBrZXkgd2l0aCBhIGtlcm5lbCBrZXkuIFRoZSBmdW5jdGlvbiBleHBlY3RzIHRoYXQKPj4gLSAq IHdlIGhvbGQgdGhlIHNlbSBmb3IgdGhlIGtleSBwYXNzZWQgaW4uIFRoZSBmdW5jdGlvbiB3aWxs IHJlbGVhc2UgdGhhdAo+PiAtICogc2VtIHdoZW4gZG9uZSBwcm9jZXNzLiBXZSB3aWxsIGFsc28g aG9sZCB0aGUgc2VtIGZvciB0aGUgdmFsaWQgbmV3IGtleQo+PiAtICogcmV0dXJuZWQuCj4+IC0g Ki8KPj4gLXN0YXRpYyBzdHJ1Y3Qga2V5ICptYWtlX2tlcm5lbF9rZXkoc3RydWN0IGtleSAqa2V5 KQo+PiAtewo+PiAtCXN0cnVjdCBrZXkgKm5ld19rZXk7Cj4+IC0Jc3RydWN0IHVzZXJfa2V5X3Bh eWxvYWQgKnBheWxvYWQ7Cj4+IC0JaW50IHJjOwo+PiAtCj4+IC0JbmV3X2tleSA9IGtleV9hbGxv Yygma2V5X3R5cGVfbG9nb24sIGtleS0+ZGVzY3JpcHRpb24sCj4+IC0JCQlHTE9CQUxfUk9PVF9V SUQsIEdMT0JBTF9ST09UX0dJRCwgY3VycmVudF9jcmVkKCksCj4+IC0JCQlLRVlfUE9TX0FMTCAm IH5LRVlfUE9TX1NFVEFUVFIsCj4+IC0JCQlLRVlfQUxMT0NfTk9UX0lOX1FVT1RBLCBOVUxMKTsK Pj4gLQlpZiAoSVNfRVJSKG5ld19rZXkpKQo+PiAtCQlyZXR1cm4gTlVMTDsKPj4gLQo+PiAtCXBh eWxvYWQgPSBrZXktPnBheWxvYWQuZGF0YVswXTsKPj4gLQlyYyA9IGtleV9pbnN0YW50aWF0ZV9h bmRfbGluayhuZXdfa2V5LCBwYXlsb2FkLT5kYXRhLAo+PiAtCQkJcGF5bG9hZC0+ZGF0YWxlbiwg TlVMTCwgTlVMTCk7Cj4+IC0JdXBfcmVhZCgma2V5LT5zZW0pOwo+PiAtCWlmIChyYyA8IDApIHsK Pj4gLQkJa2V5X3B1dChuZXdfa2V5KTsKPj4gLQkJcmV0dXJuIE5VTEw7Cj4+IC0JfQo+PiAtCj4+ IC0Ja2V5X3B1dChrZXkpOwo+PiAtCj4+IC0JZG93bl9yZWFkKCZuZXdfa2V5LT5zZW0pOwo+PiAt CXJldHVybiBuZXdfa2V5Owo+PiAtfQo+PiAtCj4+ICAgLyoKPj4gICAgKiBSZXRyaWV2ZSB1c2Vy IGluamVjdGVkIGtleQo+PiAgICAqLwo+PiBAQCAtNjEsNiArMjgsMTAgQEAgc3RhdGljIHN0cnVj dCBrZXkgKm52ZGltbV9sb29rdXBfdXNlcl9rZXkoc3RydWN0IGRldmljZSAqZGV2LAo+PiAgIAkJ cmV0dXJuIE5VTEw7Cj4+Cj4+ICAgCWtleSA9IGtleV9yZWZfdG9fcHRyKGtleXJlZik7Cj4+ICsJ aWYgKGtleS0+dHlwZSAhPSAma2V5X3R5cGVfZW5jcnlwdGVkKSB7Cj4+ICsJCWtleV9wdXQoa2V5 KTsKPj4gKwkJcmV0dXJuIE5VTEw7Cj4+ICsJfQo+PiAgIAlkZXZfZGJnKGRldiwgIiVzOiBrZXkg Zm91bmQ6ICUjeFxuIiwgX19mdW5jX18sIGtleV9zZXJpYWwoa2V5KSk7Cj4+Cj4+ICAgCXJldHVy biBrZXk7Cj4+IEBAIC03Niw3ICs0Nyw3IEBAIHN0YXRpYyBzdHJ1Y3Qga2V5ICpudmRpbW1fcmVx dWVzdF9rZXkoc3RydWN0IG52ZGltbSAqbnZkaW1tKQo+PiAgIAlzdHJ1Y3QgZGV2aWNlICpkZXYg PSAmbnZkaW1tLT5kZXY7Cj4+Cj4+ICAgCXNwcmludGYoZGVzYywgIiVzJXMiLCBOVkRJTU1fUFJF RklYLCBudmRpbW0tPmRpbW1faWQpOwo+PiAtCWtleSA9IHJlcXVlc3Rfa2V5KCZrZXlfdHlwZV9s b2dvbiwgZGVzYywgIiIpOwo+PiArCWtleSA9IHJlcXVlc3Rfa2V5KCZrZXlfdHlwZV9lbmNyeXB0 ZWQsIGRlc2MsICIiKTsKPj4gICAJaWYgKElTX0VSUihrZXkpKSB7Cj4+ICAgCQlpZiAoUFRSX0VS UihrZXkpID09IC1FTk9LRVkpCj4+ICAgCQkJZGV2X3dhcm4oZGV2LCAicmVxdWVzdF9rZXkoKSBm b3VuZCBubyBrZXlcbiIpOwo+PiBAQCAtODgsNTIgKzU5LDYgQEAgc3RhdGljIHN0cnVjdCBrZXkg Km52ZGltbV9yZXF1ZXN0X2tleShzdHJ1Y3QgbnZkaW1tICpudmRpbW0pCj4+ICAgCXJldHVybiBr ZXk7Cj4+ICAgfQo+Pgo+PiAtc3RydWN0IGtleSAqbnZkaW1tX2dldF9hbmRfdmVyaWZ5X2tleShz dHJ1Y3QgbnZkaW1tICpudmRpbW0sCj4+IC0JCXVuc2lnbmVkIGludCB1c2VyX2tleV9pZCkKPj4g LXsKPj4gLQlpbnQgcmM7Cj4+IC0Jc3RydWN0IGtleSAqdXNlcl9rZXksICprZXk7Cj4+IC0Jc3Ry dWN0IGRldmljZSAqZGV2ID0gJm52ZGltbS0+ZGV2Owo+PiAtCXN0cnVjdCB1c2VyX2tleV9wYXls b2FkICp1cGF5bG9hZCwgKnBheWxvYWQ7Cj4+IC0KPj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZu dmRpbW0tPmtleV9tdXRleCk7Cj4+IC0Ja2V5ID0gbnZkaW1tLT5rZXk7Cj4+IC0JaWYgKCFrZXkp IHsKPj4gLQkJZGV2X2RiZyhkZXYsICJObyBjYWNoZWQga2VybmVsIGtleVxuIik7Cj4+IC0JCXJl dHVybiBFUlJfUFRSKC1FQUdBSU4pOzsKPj4gLQl9Cj4+IC0JZGV2X2RiZyhkZXYsICJjYWNoZWRf a2V5OiAlI3hcbiIsIGtleV9zZXJpYWwoa2V5KSk7Cj4+IC0KPj4gLQl1c2VyX2tleSA9IG52ZGlt bV9sb29rdXBfdXNlcl9rZXkoZGV2LCB1c2VyX2tleV9pZCk7Cj4+IC0JaWYgKCF1c2VyX2tleSkg ewo+PiAtCQlkZXZfZGJnKGRldiwgIk9sZCB1c2VyIGtleSBsb29rdXAgZmFpbGVkXG4iKTsKPj4g LQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4+IC0JfQo+PiAtCWRldl9kYmcoZGV2LCAidXNl cl9rZXk6ICUjeFxuIiwga2V5X3NlcmlhbCh1c2VyX2tleSkpOwo+PiAtCj4+IC0JZG93bl9yZWFk KCZrZXktPnNlbSk7Cj4+IC0JZG93bl9yZWFkKCZ1c2VyX2tleS0+c2VtKTsKPj4gLQlwYXlsb2Fk ID0ga2V5LT5wYXlsb2FkLmRhdGFbMF07Cj4+IC0JdXBheWxvYWQgPSB1c2VyX2tleS0+cGF5bG9h ZC5kYXRhWzBdOwo+PiAtCj4+IC0JcmMgPSBtZW1jbXAocGF5bG9hZC0+ZGF0YSwgdXBheWxvYWQt PmRhdGEsIE5WRElNTV9QQVNTUEhSQVNFX0xFTik7Cj4+IC0JdXBfcmVhZCgmdXNlcl9rZXktPnNl bSk7Cj4+IC0Ja2V5X3B1dCh1c2VyX2tleSk7Cj4+IC0JdXBfcmVhZCgma2V5LT5zZW0pOwo+PiAt Cj4+IC0JaWYgKHJjICE9IDApIHsKPj4gLQkJZGV2X3dhcm4oZGV2LCAiU3VwcGxpZWQgb2xkIHVz ZXIga2V5IGZhaWxzIGNoZWNrLlxuIik7Cj4+IC0JCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwo+ PiAtCX0KPj4gLQlyZXR1cm4ga2V5Owo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgdm9pZCBrZXlfZGVz dHJveShzdHJ1Y3Qga2V5ICprZXkpCj4+IC17Cj4+IC0Ja2V5X2ludmFsaWRhdGUoa2V5KTsKPj4g LQlrZXlfcHV0KGtleSk7Cj4+IC19Cj4+IC0KPj4gICBpbnQgbnZkaW1tX3NlY3VyaXR5X2dldF9z dGF0ZShzdHJ1Y3QgbnZkaW1tICpudmRpbW0pCj4+ICAgewo+PiAgIAlpZiAoIW52ZGltbS0+c2Vj dXJpdHlfb3BzKQo+PiBAQCAtMTQ2LDE0ICs3MSwxNSBAQCBpbnQgbnZkaW1tX3NlY3VyaXR5X2Vy YXNlKHN0cnVjdCBudmRpbW0gKm52ZGltbSwgdW5zaWduZWQgaW50IGtleWlkKQo+PiAgIHsKPj4g ICAJaW50IHJjID0gMDsKPj4gICAJc3RydWN0IGtleSAqa2V5Owo+PiAtCXN0cnVjdCB1c2VyX2tl eV9wYXlsb2FkICpwYXlsb2FkOwo+PiArCXN0cnVjdCBlbmNyeXB0ZWRfa2V5X3BheWxvYWQgKmVw YXlsb2FkOwo+PiAgIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmbnZkaW1tLT5kZXY7Cj4+ICsJdm9p ZCAqZGF0YTsKPj4KPj4gICAJaWYgKCFudmRpbW0tPnNlY3VyaXR5X29wcykKPj4gICAJCXJldHVy biAtRU9QTk9UU1VQUDsKPj4KPj4gICAJbnZkaW1tX2J1c19sb2NrKGRldik7Cj4+IC0JbXV0ZXhf bG9jaygmbnZkaW1tLT5rZXlfbXV0ZXgpOwo+PiArCW11dGV4X2xvY2soJm52ZGltbS0+c2VjX211 dGV4KTsKPj4gICAJaWYgKGF0b21pY19yZWFkKCZudmRpbW0tPmJ1c3kpKSB7Cj4+ICAgCQlkZXZf d2FybihkZXYsICJVbmFibGUgdG8gc2VjdXJlIGVyYXNlIHdoaWxlIERJTU0gYWN0aXZlLlxuIik7 Cj4+ICAgCQlyYyA9IC1FQlVTWTsKPj4gQEAgLTE2NiwyNiArOTIsMjMgQEAgaW50IG52ZGltbV9z ZWN1cml0eV9lcmFzZShzdHJ1Y3QgbnZkaW1tICpudmRpbW0sIHVuc2lnbmVkIGludCBrZXlpZCkK Pj4gICAJCWdvdG8gb3V0Owo+PiAgIAl9Cj4+Cj4+IC0JLyogbG9vayBmb3IgYSBrZXkgZnJvbSBj YWNoZWQga2V5IGlmIGV4aXN0cyAqLwo+PiAtCWtleSA9IG52ZGltbV9nZXRfYW5kX3ZlcmlmeV9r ZXkobnZkaW1tLCBrZXlpZCk7Cj4+IC0JaWYgKElTX0VSUihrZXkpKSB7Cj4+ICsJa2V5ID0gbnZk aW1tX2xvb2t1cF91c2VyX2tleShkZXYsIGtleWlkKTsKPj4gKwlpZiAoIWtleSkgewo+PiAgIAkJ ZGV2X2RiZyhkZXYsICJVbmFibGUgdG8gZ2V0IGFuZCB2ZXJpZnkga2V5XG4iKTsKPj4gLQkJcmMg PSBQVFJfRVJSKGtleSk7Cj4+ICsJCXJjID0gLUVOT0tFWTsKPj4gICAJCWdvdG8gb3V0Owo+PiAg IAl9Cj4+Cj4+ICAgCWRvd25fcmVhZCgma2V5LT5zZW0pOwo+PiAtCXBheWxvYWQgPSBrZXktPnBh eWxvYWQuZGF0YVswXTsKPj4gKwllcGF5bG9hZCA9IGRlcmVmZXJlbmNlX2tleV9sb2NrZWQoa2V5 KTsKPj4gKwlkYXRhID0gZXBheWxvYWQtPmRlY3J5cHRlZF9kYXRhOwo+PiAgIAlyYyA9IG52ZGlt bS0+c2VjdXJpdHlfb3BzLT5lcmFzZShudmRpbW0sCj4+IC0JCQkoY29uc3Qgc3RydWN0IG52ZGlt bV9rZXlfZGF0YSAqKXBheWxvYWQtPmRhdGEpOwo+PiArCQkJKGNvbnN0IHN0cnVjdCBudmRpbW1f a2V5X2RhdGEgKilkYXRhKTsKPj4gICAJdXBfcmVhZCgma2V5LT5zZW0pOwo+PiAtCj4+IC0JLyog cmVtb3ZlIGtleSBzaW5jZSBzZWN1cmUgZXJhc2Uga2lsbHMgdGhlIHBhc3NwaHJhc2UgKi8KPj4g LQlrZXlfZGVzdHJveShrZXkpOwo+PiAtCW52ZGltbS0+a2V5ID0gTlVMTDsKPj4gKwlrZXlfcHV0 KGtleSk7Cj4+Cj4+ICAgIG91dDoKPj4gLQltdXRleF91bmxvY2soJm52ZGltbS0+a2V5X211dGV4 KTsKPj4gKwltdXRleF91bmxvY2soJm52ZGltbS0+c2VjX211dGV4KTsKPj4gICAJbnZkaW1tX2J1 c191bmxvY2soZGV2KTsKPj4gICAJbnZkaW1tX3NlY3VyaXR5X2dldF9zdGF0ZShudmRpbW0pOwo+ PiAgIAlyZXR1cm4gcmM7Cj4+IEBAIC0yMDEsMTEgKzEyNCwxNSBAQCBpbnQgbnZkaW1tX3NlY3Vy aXR5X2ZyZWV6ZV9sb2NrKHN0cnVjdCBudmRpbW0gKm52ZGltbSkKPj4gICAJaWYgKG52ZGltbS0+ c3RhdGUgPT0gTlZESU1NX1NFQ1VSSVRZX1VOU1VQUE9SVEVEKQo+PiAgIAkJcmV0dXJuIC1FT1BO T1RTVVBQOwo+Pgo+PiArCW11dGV4X2xvY2soJm52ZGltbS0+c2VjX211dGV4KTsKPj4gICAJcmMg PSBudmRpbW0tPnNlY3VyaXR5X29wcy0+ZnJlZXplX2xvY2sobnZkaW1tKTsKPj4gLQlpZiAocmMg PCAwKQo+PiArCWlmIChyYyA8IDApIHsKPj4gKwkJbXV0ZXhfdW5sb2NrKCZudmRpbW0tPnNlY19t dXRleCk7Cj4+ICAgCQlyZXR1cm4gcmM7Cj4+ICsJfQo+Pgo+PiAgIAludmRpbW1fc2VjdXJpdHlf Z2V0X3N0YXRlKG52ZGltbSk7Cj4+ICsJbXV0ZXhfdW5sb2NrKCZudmRpbW0tPnNlY19tdXRleCk7 Cj4+ICAgCXJldHVybiAwOwo+PiAgIH0KPj4KPj4gQEAgLTIxMyw4ICsxNDAsOSBAQCBpbnQgbnZk aW1tX3NlY3VyaXR5X2Rpc2FibGUoc3RydWN0IG52ZGltbSAqbnZkaW1tLCB1bnNpZ25lZCBpbnQg a2V5aWQpCj4+ICAgewo+PiAgIAlpbnQgcmM7Cj4+ICAgCXN0cnVjdCBrZXkgKmtleTsKPj4gLQlz dHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqcGF5bG9hZDsKPj4gKwlzdHJ1Y3QgZW5jcnlwdGVkX2tl eV9wYXlsb2FkICplcGF5bG9hZDsKPj4gICAJc3RydWN0IGRldmljZSAqZGV2ID0gJm52ZGltbS0+ ZGV2Owo+PiArCXZvaWQgKmRhdGE7Cj4+Cj4+ICAgCWlmICghbnZkaW1tLT5zZWN1cml0eV9vcHMp Cj4+ICAgCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4+IEBAIC0yMjIsNTcgKzE1MCw1MiBAQCBpbnQg bnZkaW1tX3NlY3VyaXR5X2Rpc2FibGUoc3RydWN0IG52ZGltbSAqbnZkaW1tLCB1bnNpZ25lZCBp bnQga2V5aWQpCj4+ICAgCWlmIChudmRpbW0tPnN0YXRlID09IE5WRElNTV9TRUNVUklUWV9VTlNV UFBPUlRFRCkKPj4gICAJCXJldHVybiAtRU9QTk9UU1VQUDsKPj4KPj4gLQltdXRleF9sb2NrKCZu dmRpbW0tPmtleV9tdXRleCk7Cj4+ICsJbXV0ZXhfbG9jaygmbnZkaW1tLT5zZWNfbXV0ZXgpOwo+ PiAgIAkvKiBsb29rIGZvciBhIGtleSBmcm9tIGNhY2hlZCBrZXkgKi8KPj4gLQlrZXkgPSBudmRp bW1fZ2V0X2FuZF92ZXJpZnlfa2V5KG52ZGltbSwga2V5aWQpOwo+PiAtCWlmIChJU19FUlIoa2V5 KSkgewo+PiAtCQltdXRleF91bmxvY2soJm52ZGltbS0+a2V5X211dGV4KTsKPj4gLQkJcmV0dXJu IFBUUl9FUlIoa2V5KTsKPj4gKwlrZXkgPSBudmRpbW1fbG9va3VwX3VzZXJfa2V5KGRldiwga2V5 aWQpOwo+PiArCWlmICgha2V5KSB7Cj4+ICsJCW11dGV4X3VubG9jaygmbnZkaW1tLT5zZWNfbXV0 ZXgpOwo+PiArCQlyZXR1cm4gLUVOT0tFWTsKPj4gICAJfQo+Pgo+PiAgIAlkb3duX3JlYWQoJmtl eS0+c2VtKTsKPj4gLQlwYXlsb2FkID0ga2V5LT5wYXlsb2FkLmRhdGFbMF07Cj4+ICsJZXBheWxv YWQgPSBkZXJlZmVyZW5jZV9rZXlfbG9ja2VkKGtleSk7Cj4+ICsJZGF0YSA9IGVwYXlsb2FkLT5k ZWNyeXB0ZWRfZGF0YTsKPj4KPj4gICAJcmMgPSBudmRpbW0tPnNlY3VyaXR5X29wcy0+ZGlzYWJs ZShudmRpbW0sCj4+IC0JCQkoY29uc3Qgc3RydWN0IG52ZGltbV9rZXlfZGF0YSAqKXBheWxvYWQt PmRhdGEpOwo+PiArCQkJKGNvbnN0IHN0cnVjdCBudmRpbW1fa2V5X2RhdGEgKilkYXRhKTsKPj4g ICAJdXBfcmVhZCgma2V5LT5zZW0pOwo+PiAtCWlmIChyYyA8IDApIHsKPj4gKwlpZiAocmMgPCAw KQo+PiAgIAkJZGV2X3dhcm4oZGV2LCAic2VjdXJpdHkgZGlzYWJsZSBmYWlsZWRcbiIpOwo+PiAt CQlnb3RvIG91dDsKPj4gLQl9Cj4+Cj4+IC0JLyogSWYgd2Ugc3VjY2VlZCB0aGVuIHJlbW92ZSB0 aGUga2V5ICovCj4+IC0Ja2V5X2Rlc3Ryb3koa2V5KTsKPj4gLQludmRpbW0tPmtleSA9IE5VTEw7 Cj4+IC0KPj4gLSBvdXQ6Cj4+IC0JbXV0ZXhfdW5sb2NrKCZudmRpbW0tPmtleV9tdXRleCk7Cj4+ ICsJa2V5X3B1dChrZXkpOwo+PiAgIAludmRpbW1fc2VjdXJpdHlfZ2V0X3N0YXRlKG52ZGltbSk7 Cj4+ICsJbXV0ZXhfdW5sb2NrKCZudmRpbW0tPnNlY19tdXRleCk7Cj4+ICAgCXJldHVybiByYzsK Pj4gICB9Cj4+Cj4+IC1zdGF0aWMgaW50IG52ZGltbV9zZWxmX3ZlcmlmeV9rZXkoc3RydWN0IG52 ZGltbSAqbnZkaW1tKQo+PiArc3RhdGljIHN0cnVjdCBrZXkgKm52ZGltbV9zZWxmX3ZlcmlmeV9r ZXkoc3RydWN0IG52ZGltbSAqbnZkaW1tKQo+PiAgIHsKPj4gICAJc3RydWN0IGtleSAqa2V5Owo+ PiAtCXN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICpwYXlsb2FkOwo+PiArCXN0cnVjdCBlbmNyeXB0 ZWRfa2V5X3BheWxvYWQgKmVwYXlsb2FkOwo+PiAgIAl2b2lkICpkYXRhOwo+PiAgIAlpbnQgcmM7 Cj4+Cj4+IC0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmbnZkaW1tLT5rZXlfbXV0ZXgpOwo+PiAtCj4+ ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmbnZkaW1tLT5zZWNfbXV0ZXgpOwo+PiAgIAlrZXkgPSBu dmRpbW1fcmVxdWVzdF9rZXkobnZkaW1tKTsKPj4gICAJaWYgKCFrZXkpCj4+IC0JCXJldHVybiAt RU5PS0VZOwo+PiArCQlyZXR1cm4gTlVMTDsKPj4gKwo+PiArCWRvd25fcmVhZCgma2V5LT5zZW0p Owo+PiArCWVwYXlsb2FkID0gZGVyZWZlcmVuY2Vfa2V5X2xvY2tlZChrZXkpOwo+PiArCWRhdGEg PSBlcGF5bG9hZC0+ZGVjcnlwdGVkX2RhdGE7Cj4+Cj4+IC0JaWYgKGtleS0+ZGF0YWxlbiAhPSBO VkRJTU1fUEFTU1BIUkFTRV9MRU4pIHsKPj4gKwlpZiAoZXBheWxvYWQtPmRlY3J5cHRlZF9kYXRh bGVuICE9IE5WRElNTV9QQVNTUEhSQVNFX0xFTikgewo+PiAgIAkJa2V5X3B1dChrZXkpOwo+PiAt CQlyZXR1cm4gLUVJTlZBTDsKPj4gKwkJa2V5ID0gTlVMTDsKPj4gKwkJZ290byBvdXQ7Cj4+ICAg CX0KPj4KPj4gLQlkb3duX3JlYWQoJmtleS0+c2VtKTsKPj4gLQlwYXlsb2FkID0ga2V5LT5wYXls b2FkLmRhdGFbMF07Cj4+IC0JZGF0YSA9IHBheWxvYWQtPmRhdGE7Cj4+IC0KPj4gICAJLyoKPj4g ICAJICogV2Ugc2VuZCB0aGUgc2FtZSBrZXkgdG8gdGhlIGhhcmR3YXJlIGFzIG5ldyBhbmQgb2xk IGtleSB0bwo+PiAgIAkgKiB2ZXJpZnkgdGhhdCB0aGUga2V5IGlzIGdvb2QuCj4+IEBAIC0yODAs MTkgKzIwMywyMSBAQCBzdGF0aWMgaW50IG52ZGltbV9zZWxmX3ZlcmlmeV9rZXkoc3RydWN0IG52 ZGltbSAqbnZkaW1tKQo+PiAgIAlyYyA9IG52ZGltbS0+c2VjdXJpdHlfb3BzLT5jaGFuZ2Vfa2V5 KG52ZGltbSwgZGF0YSwgZGF0YSk7Cj4+ICAgCWlmIChyYyA8IDApIHsKPj4gICAJCWtleV9wdXQo a2V5KTsKPj4gLQkJcmV0dXJuIHJjOwo+PiArCQlrZXkgPSBOVUxMOwo+PiAgIAl9Cj4+ICsKPj4g K291dDoKPj4gICAJdXBfcmVhZCgma2V5LT5zZW0pOwo+PiAtCW52ZGltbS0+a2V5ID0ga2V5Owo+ PiAtCXJldHVybiAwOwo+PiArCXJldHVybiBrZXk7Cj4+ICAgfQo+Pgo+PiAgIGludCBudmRpbW1f c2VjdXJpdHlfdW5sb2NrX2RpbW0oc3RydWN0IG52ZGltbSAqbnZkaW1tKQo+PiAgIHsKPj4gLQlz dHJ1Y3Qga2V5ICprZXk7Cj4+IC0JaW50IHJjID0gLUVOWElPOwo+PiAtCXN0cnVjdCB1c2VyX2tl eV9wYXlsb2FkICpwYXlsb2FkOwo+PiArCXN0cnVjdCBrZXkgKmtleSA9IE5VTEw7Cj4+ICsJaW50 IHJjOwo+PiArCXN0cnVjdCBlbmNyeXB0ZWRfa2V5X3BheWxvYWQgKmVwYXlsb2FkOwo+PiAgIAlz dHJ1Y3QgZGV2aWNlICpkZXYgPSAmbnZkaW1tLT5kZXY7Cj4+ICsJdm9pZCAqZGF0YTsKPj4KPj4g ICAJaWYgKCFudmRpbW0tPnNlY3VyaXR5X29wcykKPj4gICAJCXJldHVybiAwOwo+PiBAQCAtMzAx LDcgKzIyNiw3IEBAIGludCBudmRpbW1fc2VjdXJpdHlfdW5sb2NrX2RpbW0oc3RydWN0IG52ZGlt bSAqbnZkaW1tKQo+PiAgIAkJCW52ZGltbS0+c3RhdGUgPT0gTlZESU1NX1NFQ1VSSVRZX0RJU0FC TEVEKQo+PiAgIAkJcmV0dXJuIDA7Cj4+Cj4+IC0JbXV0ZXhfbG9jaygmbnZkaW1tLT5rZXlfbXV0 ZXgpOwo+PiArCW11dGV4X2xvY2soJm52ZGltbS0+c2VjX211dGV4KTsKPj4gICAJLyoKPj4gICAJ ICogSWYgdGhlIHByZS1PUyBoYXMgdW5sb2NrZWQgdGhlIERJTU0sIHdlIHdpbGwgYXR0ZW1wdCB0 byBzZW5kCj4+ICAgCSAqIHRoZSBrZXkgZnJvbSByZXF1ZXN0X2tleSgpIHRvIHRoZSBoYXJkd2Fy ZSBmb3IgdmVyaWZpY2F0aW9uLgo+PiBAQCAtMzEwLDYwICsyMzUsNTAgQEAgaW50IG52ZGltbV9z ZWN1cml0eV91bmxvY2tfZGltbShzdHJ1Y3QgbnZkaW1tICpudmRpbW0pCj4+ICAgCSAqIG90aGVy IHNlY3VyaXR5IG9wZXJhdGlvbnMuCj4+ICAgCSAqLwo+PiAgIAlpZiAobnZkaW1tLT5zdGF0ZSA9 PSBOVkRJTU1fU0VDVVJJVFlfVU5MT0NLRUQpIHsKPj4gLQkJcmMgPSBudmRpbW1fc2VsZl92ZXJp Znlfa2V5KG52ZGltbSk7Cj4+IC0JCWlmIChyYyA8IDApIHsKPj4gKwkJa2V5ID0gbnZkaW1tX3Nl bGZfdmVyaWZ5X2tleShudmRpbW0pOwo+PiArCQlpZiAoIWtleSkgewo+PiAgIAkJCXJjID0gbnZk aW1tX3NlY3VyaXR5X2ZyZWV6ZV9sb2NrKG52ZGltbSk7Cj4+IC0JCQltdXRleF91bmxvY2soJm52 ZGltbS0+a2V5X211dGV4KTsKPj4gLQkJCXJldHVybiByYzsKPj4gKwkJCW11dGV4X3VubG9jaygm bnZkaW1tLT5zZWNfbXV0ZXgpOwo+PiArCQkJcmV0dXJuIC1FTk9LRVk7Cj4+ICAgCQl9Cj4+ICAg CX0KPj4KPj4gLQlrZXkgPSBudmRpbW0tPmtleTsKPj4gLQlpZiAoIWtleSkgewo+PiArCWlmICgh a2V5KQo+PiAgIAkJa2V5ID0gbnZkaW1tX3JlcXVlc3Rfa2V5KG52ZGltbSk7Cj4+IC0JCWlmIChr ZXkgJiYga2V5LT5kYXRhbGVuICE9IE5WRElNTV9QQVNTUEhSQVNFX0xFTikgewo+PiAtCQkJa2V5 X3B1dChrZXkpOwo+PiAtCQkJa2V5ID0gTlVMTDsKPj4gLQkJCXJjID0gLUVJTlZBTDsKPj4gLQkJ fQo+PiAtCX0KPj4gKwo+PiAgIAlpZiAoIWtleSkgewo+PiAtCQltdXRleF91bmxvY2soJm52ZGlt bS0+a2V5X211dGV4KTsKPj4gLQkJcmV0dXJuIHJjOwo+PiArCQltdXRleF91bmxvY2soJm52ZGlt bS0+c2VjX211dGV4KTsKPj4gKwkJcmV0dXJuIC1FTk9LRVk7Cj4+ICAgCX0KPj4KPj4gICAJZGV2 X2RiZyhkZXYsICIlczoga2V5OiAlI3hcbiIsIF9fZnVuY19fLCBrZXlfc2VyaWFsKGtleSkpOwo+ PiAgIAlkb3duX3JlYWQoJmtleS0+c2VtKTsKPj4gLQlwYXlsb2FkID0ga2V5LT5wYXlsb2FkLmRh dGFbMF07Cj4+ICsJZXBheWxvYWQgPSBkZXJlZmVyZW5jZV9rZXlfbG9ja2VkKGtleSk7Cj4+ICsJ ZGF0YSA9IGVwYXlsb2FkLT5kZWNyeXB0ZWRfZGF0YTsKPj4gKwo+PiArCWlmIChlcGF5bG9hZC0+ ZGVjcnlwdGVkX2RhdGFsZW4gIT0gTlZESU1NX1BBU1NQSFJBU0VfTEVOKSB7Cj4+ICsJCXVwX3Jl YWQoJmtleS0+c2VtKTsKPj4gKwkJa2V5X3B1dChrZXkpOwo+PiArCQltdXRleF91bmxvY2soJm52 ZGltbS0+c2VjX211dGV4KTsKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJfQo+PiArCj4+ICAg CXJjID0gbnZkaW1tLT5zZWN1cml0eV9vcHMtPnVubG9jayhudmRpbW0sCj4+IC0JCQkoY29uc3Qg c3RydWN0IG52ZGltbV9rZXlfZGF0YSAqKXBheWxvYWQtPmRhdGEpOwo+PiArCQkJKGNvbnN0IHN0 cnVjdCBudmRpbW1fa2V5X2RhdGEgKilkYXRhKTsKPj4gICAJdXBfcmVhZCgma2V5LT5zZW0pOwo+ Pgo+PiAgIAlpZiAocmMgPT0gMCkgewo+PiAtCQlpZiAoIW52ZGltbS0+a2V5KQo+PiAtCQkJbnZk aW1tLT5rZXkgPSBrZXk7Cj4+ICAgCQludmRpbW0tPnN0YXRlID0gTlZESU1NX1NFQ1VSSVRZX1VO TE9DS0VEOwo+PiAgIAkJZGV2X2RiZyhkZXYsICJESU1NICVzIHVubG9ja2VkXG4iLCBkZXZfbmFt ZShkZXYpKTsKPj4gLQl9IGVsc2Ugewo+PiAtCQlrZXlfaW52YWxpZGF0ZShrZXkpOwo+PiAtCQlr ZXlfcHV0KGtleSk7Cj4+IC0JCW52ZGltbS0+a2V5ID0gTlVMTDsKPj4gKwl9IGVsc2UKPj4gICAJ CWRldl93YXJuKGRldiwgIkZhaWxlZCB0byB1bmxvY2sgZGltbTogJXNcbiIsIGRldl9uYW1lKGRl dikpOwo+PiAtCX0KPj4KPj4gLQltdXRleF91bmxvY2soJm52ZGltbS0+a2V5X211dGV4KTsKPj4g KwlrZXlfcHV0KGtleSk7Cj4+ICAgCW52ZGltbV9zZWN1cml0eV9nZXRfc3RhdGUobnZkaW1tKTsK Pj4gKwltdXRleF91bmxvY2soJm52ZGltbS0+c2VjX211dGV4KTsKPj4gICAJcmV0dXJuIHJjOwo+ PiAgIH0KPj4KPj4gLXZvaWQgbnZkaW1tX3NlY3VyaXR5X3JlbGVhc2Uoc3RydWN0IG52ZGltbSAq bnZkaW1tKQo+PiAtewo+PiAtCW11dGV4X2xvY2soJm52ZGltbS0+a2V5X211dGV4KTsKPj4gLQlr ZXlfcHV0KG52ZGltbS0+a2V5KTsKPj4gLQludmRpbW0tPmtleSA9IE5VTEw7Cj4+IC0JbXV0ZXhf dW5sb2NrKCZudmRpbW0tPmtleV9tdXRleCk7Cj4+IC19Cj4+IC0KPj4gICBpbnQgbnZkaW1tX3Nl Y3VyaXR5X2NoYW5nZV9rZXkoc3RydWN0IG52ZGltbSAqbnZkaW1tLAo+PiAgIAkJdW5zaWduZWQg aW50IG9sZF9rZXlpZCwgdW5zaWduZWQgaW50IG5ld19rZXlpZCkKPj4gICB7Cj4+IEBAIC0zNzEs NyArMjg2LDcgQEAgaW50IG52ZGltbV9zZWN1cml0eV9jaGFuZ2Vfa2V5KHN0cnVjdCBudmRpbW0g Km52ZGltbSwKPj4gICAJc3RydWN0IGtleSAqa2V5LCAqb2xkX2tleTsKPj4gICAJdm9pZCAqb2xk X2RhdGEgPSBOVUxMLCAqbmV3X2RhdGE7Cj4+ICAgCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZudmRp bW0tPmRldjsKPj4gLQlzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqcGF5bG9hZCwgKm9sZF9wYXls b2FkOwo+PiArCXN0cnVjdCBlbmNyeXB0ZWRfa2V5X3BheWxvYWQgKmVwYXlsb2FkLCAqb2xkX2Vw YXlsb2FkOwo+Pgo+PiAgIAlpZiAoIW52ZGltbS0+c2VjdXJpdHlfb3BzKQo+PiAgIAkJcmV0dXJu IC1FT1BOT1RTVVBQOwo+PiBAQCAtMzc5LDE1ICsyOTQsMTAgQEAgaW50IG52ZGltbV9zZWN1cml0 eV9jaGFuZ2Vfa2V5KHN0cnVjdCBudmRpbW0gKm52ZGltbSwKPj4gICAJaWYgKG52ZGltbS0+c3Rh dGUgPT0gTlZESU1NX1NFQ1VSSVRZX0ZST1pFTikKPj4gICAJCXJldHVybiAtRUJVU1k7Cj4+Cj4+ IC0JbXV0ZXhfbG9jaygmbnZkaW1tLT5rZXlfbXV0ZXgpOwo+PiArCW11dGV4X2xvY2soJm52ZGlt bS0+c2VjX211dGV4KTsKPj4gICAJLyogbG9vayBmb3IgYSBrZXkgZnJvbSBjYWNoZWQga2V5IGlm IGV4aXN0cyAqLwo+PiAtCW9sZF9rZXkgPSBudmRpbW1fZ2V0X2FuZF92ZXJpZnlfa2V5KG52ZGlt bSwgb2xkX2tleWlkKTsKPj4gLQlpZiAoSVNfRVJSKG9sZF9rZXkpICYmIFBUUl9FUlIob2xkX2tl eSkgPT0gLUVBR0FJTikKPj4gLQkJb2xkX2tleSA9IE5VTEw7Cj4+IC0JZWxzZSBpZiAoSVNfRVJS KG9sZF9rZXkpKSB7Cj4+IC0JCW11dGV4X3VubG9jaygmbnZkaW1tLT5rZXlfbXV0ZXgpOwo+PiAt CQlyZXR1cm4gUFRSX0VSUihvbGRfa2V5KTsKPj4gLQl9IGVsc2UKPj4gKwlvbGRfa2V5ID0gbnZk aW1tX2xvb2t1cF91c2VyX2tleShkZXYsIG9sZF9rZXlpZCk7Cj4+ICsJaWYgKG9sZF9rZXkpCj4+ ICAgCQlkZXZfZGJnKGRldiwgIiVzOiBvbGQga2V5OiAlI3hcbiIsIF9fZnVuY19fLAo+PiAgIAkJ CQlrZXlfc2VyaWFsKG9sZF9rZXkpKTsKPj4KPj4gQEAgLTQwMiw3NiArMzEyLDI4IEBAIGludCBu dmRpbW1fc2VjdXJpdHlfY2hhbmdlX2tleShzdHJ1Y3QgbnZkaW1tICpudmRpbW0sCj4+ICAgCWRl dl9kYmcoZGV2LCAiJXM6IG5ldyBrZXk6ICUjeFxuIiwgX19mdW5jX18sIGtleV9zZXJpYWwoa2V5 KSk7Cj4+Cj4+ICAgCWRvd25fcmVhZCgma2V5LT5zZW0pOwo+PiAtCXBheWxvYWQgPSBrZXktPnBh eWxvYWQuZGF0YVswXTsKPj4gLQlpZiAocGF5bG9hZC0+ZGF0YWxlbiAhPSBOVkRJTU1fUEFTU1BI UkFTRV9MRU4pIHsKPj4gLQkJcmMgPSAtRUlOVkFMOwo+PiAtCQl1cF9yZWFkKCZrZXktPnNlbSk7 Cj4+IC0JCWdvdG8gb3V0Owo+PiAtCX0KPj4gLQo+PiAtCS8qCj4+IC0JICogU2luY2UgdGhlcmUg aXMgbm8gZXhpc3Rpbmcga2V5IHRoaXMgdXNlciBrZXkgd2lsbCBiZWNvbWUgdGhlCj4+IC0JICog a2VybmVsJ3Mga2V5Lgo+PiAtCSAqLwo+PiAtCWlmICghb2xkX2tleSkgewo+PiAtCQlrZXkgPSBt YWtlX2tlcm5lbF9rZXkoa2V5KTsKPj4gLQkJaWYgKCFrZXkpIHsKPj4gLQkJCXJjID0gLUVOT01F TTsKPj4gLQkJCWdvdG8gb3V0Owo+PiAtCQl9Cj4+IC0JfQo+PiAtCj4+IC0JLyoKPj4gLQkgKiBX ZSBkb24ndCBuZWVkIHRvIHJlbGVhc2Uga2V5LT5zZW0gaGVyZSBiZWNhdXNlCj4+IC0JICogbWFr ZV9rZXJuZWxfa2V5KCkgd2lsbCBoYXZlIHVwZ3JhZGVkIHRoZSB1c2VyIGtleSB0byBrZXJuZWwK Pj4gLQkgKiBhbmQgaGFuZGxlZCB0aGUgc2VtYXBob3JlIGhhbmRvZmYuCj4+IC0JICovCj4+IC0J cGF5bG9hZCA9IGtleS0+cGF5bG9hZC5kYXRhWzBdOwo+PiArCWVwYXlsb2FkID0gZGVyZWZlcmVu Y2Vfa2V5X2xvY2tlZChrZXkpOwo+PiArCW5ld19kYXRhID0gZXBheWxvYWQtPmRlY3J5cHRlZF9k YXRhOwo+Pgo+PiAgIAlpZiAob2xkX2tleSkgewo+PiAgIAkJZG93bl9yZWFkKCZvbGRfa2V5LT5z ZW0pOwo+PiAtCQlvbGRfcGF5bG9hZCA9IG9sZF9rZXktPnBheWxvYWQuZGF0YVswXTsKPj4gLQkJ b2xkX2RhdGEgPSBvbGRfcGF5bG9hZC0+ZGF0YTsKPj4gKwkJb2xkX2VwYXlsb2FkID0gZGVyZWZl cmVuY2Vfa2V5X2xvY2tlZChvbGRfa2V5KTsKPj4gKwkJb2xkX2RhdGEgPSBvbGRfZXBheWxvYWQt PmRlY3J5cHRlZF9kYXRhOwo+PiAgIAl9Cj4+Cj4+IC0JbmV3X2RhdGEgPSBwYXlsb2FkLT5kYXRh Owo+PiAtCj4+ICAgCXJjID0gbnZkaW1tLT5zZWN1cml0eV9vcHMtPmNoYW5nZV9rZXkobnZkaW1t LCBvbGRfZGF0YSwKPj4gICAJCQluZXdfZGF0YSk7Cj4+ICAgCWlmIChyYykKPj4gICAJCWRldl93 YXJuKGRldiwgImtleSB1cGRhdGUgZmFpbGVkOiAlZFxuIiwgcmMpOwo+Pgo+PiAtCWlmIChvbGRf a2V5KSB7Cj4+ICsJaWYgKG9sZF9rZXkpCj4+ICAgCQl1cF9yZWFkKCZvbGRfa2V5LT5zZW0pOwo+ PiAtCQkvKgo+PiAtCQkgKiBXaXRoIHRoZSBrZXkgdXBkYXRlIGRvbmUgdmlhIGhhcmR3YXJlLCB3 ZSBubyBsb25nZXIgbmVlZAo+PiAtCQkgKiB0aGUgb2xkIHBheWxvYWQgYW5kIG5lZWQgdG8gcmVw bGFjZSBpdCB3aXRoIHRoZSBuZXcKPj4gLQkJICogcGF5bG9hZC4ga2V5X3VwZGF0ZSgpIHdpbGwg YWNxdWlyZSB3cml0ZSBzZW0gb2YgdGhlCj4+IC0JCSAqIG9sZCBrZXkgYW5kIHVwZGF0ZSB3aXRo IG5ldyBkYXRhLgo+PiAtCQkgKi8KPj4gLQkJaWYgKHJjID09IDApIHsKPj4gLQkJCXJjID0ga2V5 X3VwZGF0ZShtYWtlX2tleV9yZWYob2xkX2tleSwgMSksIG5ld19kYXRhLAo+PiAtCQkJCQlvbGRf a2V5LT5kYXRhbGVuKTsKPj4gLQkJCWlmIChyYyA8IDApIHsKPj4gLQkJCQlkZXZfd2FybihkZXYs Cj4+IC0JCQkJCSJrZXJuZWwga2V5IHVwZGF0ZSBmYWlsZWQ6ICVkXG4iLCByYyk7Cj4+IC0JCQkJ a2V5X2Rlc3Ryb3kob2xkX2tleSk7Cj4+IC0JCQkJbnZkaW1tLT5rZXkgPSBOVUxMOwo+PiAtCQkJ fQo+PiAtCQl9Cj4+IC0JfQo+PiAgIAl1cF9yZWFkKCZrZXktPnNlbSk7Cj4+IC0KPj4gLQlpZiAo IW9sZF9rZXkpIHsKPj4gLQkJaWYgKHJjID09IDApIHsKPj4gLQkJCWRldl9kYmcoZGV2LCAia2V5 IGNhY2hlZDogJSN4XG4iLCBrZXlfc2VyaWFsKGtleSkpOwo+PiAtCQkJbnZkaW1tLT5rZXkgPSBr ZXk7Cj4+IC0JCX0gZWxzZQo+PiAtCQkJa2V5X2Rlc3Ryb3koa2V5KTsKPj4gLQl9Cj4+ICAgCW52 ZGltbV9zZWN1cml0eV9nZXRfc3RhdGUobnZkaW1tKTsKPj4KPj4gICAgb3V0Ogo+PiAtCW11dGV4 X3VubG9jaygmbnZkaW1tLT5rZXlfbXV0ZXgpOwo+PiArCW11dGV4X3VubG9jaygmbnZkaW1tLT5z ZWNfbXV0ZXgpOwo+PiArCWtleV9wdXQob2xkX2tleSk7Cj4+ICsJa2V5X3B1dChrZXkpOwo+PiAg IAlyZXR1cm4gcmM7Cj4+ICAgfQo+PgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpMaW51eC1udmRpbW0gbWFpbGluZyBsaXN0CkxpbnV4LW52ZGltbUBsaXN0 cy4wMS5vcmcKaHR0cHM6Ly9saXN0cy4wMS5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1udmRp bW0K