merged in default doxygen_doc
authorKrista 'DarthMama' Bennett <krista@pep.foundation>
Mon, 13 Jul 2020 13:41:27 +0200
branchdoxygen_doc
changeset 4853f7d325d2ba5f
parent 4792 7056435ab9e7
parent 4852 308d29b0cac7
child 4884 5f0c08354abd
merged in default
src/baseprotocol.c
src/baseprotocol.h
src/key_reset.c
src/keymanagement.c
src/message.h
src/message_api.c
src/pEpEngine.c
src/pEpEngine.h
src/pEp_internal.h
src/pgp_sequoia.c
src/sync_api.h
     1.1 --- a/.hgtags	Tue Jun 30 14:56:25 2020 +0200
     1.2 +++ b/.hgtags	Mon Jul 13 13:41:27 2020 +0200
     1.3 @@ -46,3 +46,11 @@
     1.4  dc3d3f1c36aa519597e6cdbe579f9c34b0c7dfda Release_2.1.0-RC7
     1.5  99fb132a86ce96b3b87a539fd2344691747ec330 Release_2.1.0-RC7
     1.6  a046dab8883fbc25a5ca4940e252ce6f0a862002 Release_2.1.0-RC8
     1.7 +f783fb44981d96e46f9454977cec34eb027f9ab2 Release_2.1.0-RC9
     1.8 +3b2ea2c1f5a1c033c1fcc1ee6e7d7ac35778597e Release_2.1.0-RC10
     1.9 +47231c726a380bf53411436a6a21091b6c59f283 Release_2.1.0-RC11
    1.10 +d0150fa70a3df2eeb5b96f68917a910ebcaa4597 Release_2.1.0-RC12
    1.11 +89e31ecdc61b25533eb7d00d09f1d44afcddf7e4 Release_2.1.0-RC13
    1.12 +64797b875a00d3167a4a53c6c80298141ed37376 Release_2.1.0-RC14
    1.13 +2c94359b432679702352ecd8705f4321eca3328a Release_2.1.0-RC15
    1.14 +ddded8784a8f482a41ef45c09b563a6cf9902bcf Release_2.1.0-RC16
     2.1 --- a/build-windows/generate_code.cmd	Tue Jun 30 14:56:25 2020 +0200
     2.2 +++ b/build-windows/generate_code.cmd	Mon Jul 13 13:41:27 2020 +0200
     2.3 @@ -71,6 +71,8 @@
     2.4  DEL *-sample.c
     2.5  
     2.6  CD %pwd%\..
     2.7 -IF NOT EXIST pEp mklink /d pEp pEpEngine\src
     2.8 +RD /S/Q pEp
     2.9 +MKDIR pEp
    2.10 +XCOPY pEpEngine\src\*.h pEp\ /Y/F/I
    2.11  
    2.12  POPD
     3.1 --- a/build-windows/libpEpasn1/libpEpasn1.vcxproj	Tue Jun 30 14:56:25 2020 +0200
     3.2 +++ b/build-windows/libpEpasn1/libpEpasn1.vcxproj	Mon Jul 13 13:41:27 2020 +0200
     3.3 @@ -90,13 +90,140 @@
     3.4      <Text Include="ReadMe.txt" />
     3.5    </ItemGroup>
     3.6    <ItemGroup>
     3.7 -    <ClInclude Include="..\..\asn.1\*.h" />
     3.8 +    <None Include="..\generate_code.cmd" />
     3.9    </ItemGroup>
    3.10    <ItemGroup>
    3.11 -    <ClCompile Include="..\..\asn.1\*.c" />
    3.12 +    <ClCompile Include="..\..\asn.1\asn_codecs_prim.c" />
    3.13 +    <ClCompile Include="..\..\asn.1\asn_SEQUENCE_OF.c" />
    3.14 +    <ClCompile Include="..\..\asn.1\asn_SET_OF.c" />
    3.15 +    <ClCompile Include="..\..\asn.1\Beacon.c" />
    3.16 +    <ClCompile Include="..\..\asn.1\ber_decoder.c" />
    3.17 +    <ClCompile Include="..\..\asn.1\ber_tlv_length.c" />
    3.18 +    <ClCompile Include="..\..\asn.1\ber_tlv_tag.c" />
    3.19 +    <ClCompile Include="..\..\asn.1\BIT_STRING.c" />
    3.20 +    <ClCompile Include="..\..\asn.1\BOOLEAN.c" />
    3.21 +    <ClCompile Include="..\..\asn.1\Command.c" />
    3.22 +    <ClCompile Include="..\..\asn.1\Commands.c" />
    3.23 +    <ClCompile Include="..\..\asn.1\CommitAccept.c" />
    3.24 +    <ClCompile Include="..\..\asn.1\CommitAcceptForGroup.c" />
    3.25 +    <ClCompile Include="..\..\asn.1\CommitAcceptOfferer.c" />
    3.26 +    <ClCompile Include="..\..\asn.1\CommitAcceptRequester.c" />
    3.27 +    <ClCompile Include="..\..\asn.1\CommitReject.c" />
    3.28 +    <ClCompile Include="..\..\asn.1\constraints.c" />
    3.29 +    <ClCompile Include="..\..\asn.1\constr_CHOICE.c" />
    3.30 +    <ClCompile Include="..\..\asn.1\constr_SEQUENCE.c" />
    3.31 +    <ClCompile Include="..\..\asn.1\constr_SEQUENCE_OF.c" />
    3.32 +    <ClCompile Include="..\..\asn.1\constr_SET_OF.c" />
    3.33 +    <ClCompile Include="..\..\asn.1\constr_TYPE.c" />
    3.34 +    <ClCompile Include="..\..\asn.1\der_encoder.c" />
    3.35 +    <ClCompile Include="..\..\asn.1\Distribution.c" />
    3.36 +    <ClCompile Include="..\..\asn.1\ElectGroupKeyResetLeader.c" />
    3.37 +    <ClCompile Include="..\..\asn.1\GroupHandshake.c" />
    3.38 +    <ClCompile Include="..\..\asn.1\GroupKeysAndClose.c" />
    3.39 +    <ClCompile Include="..\..\asn.1\GroupKeysForNewMember.c" />
    3.40 +    <ClCompile Include="..\..\asn.1\GroupKeysUpdate.c" />
    3.41 +    <ClCompile Include="..\..\asn.1\GroupTrustThisKey.c" />
    3.42 +    <ClCompile Include="..\..\asn.1\Hash.c" />
    3.43 +    <ClCompile Include="..\..\asn.1\Hex.c" />
    3.44 +    <ClCompile Include="..\..\asn.1\Identity.c" />
    3.45 +    <ClCompile Include="..\..\asn.1\IdentityList.c" />
    3.46 +    <ClCompile Include="..\..\asn.1\InitUnledGroupKeyReset.c" />
    3.47 +    <ClCompile Include="..\..\asn.1\INTEGER.c" />
    3.48 +    <ClCompile Include="..\..\asn.1\ISO639-1.c" />
    3.49 +    <ClCompile Include="..\..\asn.1\KeyReset.c" />
    3.50 +    <ClCompile Include="..\..\asn.1\KeySync.c" />
    3.51 +    <ClCompile Include="..\..\asn.1\NativeEnumerated.c" />
    3.52 +    <ClCompile Include="..\..\asn.1\NativeInteger.c" />
    3.53 +    <ClCompile Include="..\..\asn.1\NegotiationOpen.c" />
    3.54 +    <ClCompile Include="..\..\asn.1\NegotiationRequest.c" />
    3.55 +    <ClCompile Include="..\..\asn.1\NegotiationRequestGrouped.c" />
    3.56 +    <ClCompile Include="..\..\asn.1\OCTET_STRING.c" />
    3.57 +    <ClCompile Include="..\..\asn.1\OwnKeysOfferer.c" />
    3.58 +    <ClCompile Include="..\..\asn.1\OwnKeysRequester.c" />
    3.59 +    <ClCompile Include="..\..\asn.1\pdu_collection.c" />
    3.60 +    <ClCompile Include="..\..\asn.1\per_decoder.c" />
    3.61 +    <ClCompile Include="..\..\asn.1\per_encoder.c" />
    3.62 +    <ClCompile Include="..\..\asn.1\per_opentype.c" />
    3.63 +    <ClCompile Include="..\..\asn.1\per_support.c" />
    3.64 +    <ClCompile Include="..\..\asn.1\PrintableString.c" />
    3.65 +    <ClCompile Include="..\..\asn.1\PString.c" />
    3.66 +    <ClCompile Include="..\..\asn.1\Rollback.c" />
    3.67 +    <ClCompile Include="..\..\asn.1\Sync.c" />
    3.68 +    <ClCompile Include="..\..\asn.1\SynchronizeGroupKeys.c" />
    3.69 +    <ClCompile Include="..\..\asn.1\TID.c" />
    3.70 +    <ClCompile Include="..\..\asn.1\UTF8String.c" />
    3.71 +    <ClCompile Include="..\..\asn.1\Version.c" />
    3.72 +    <ClCompile Include="..\..\asn.1\xer_decoder.c" />
    3.73 +    <ClCompile Include="..\..\asn.1\xer_encoder.c" />
    3.74 +    <ClCompile Include="..\..\asn.1\xer_support.c" />
    3.75    </ItemGroup>
    3.76    <ItemGroup>
    3.77 -    <None Include="..\generate_code.cmd" />
    3.78 +    <ClInclude Include="..\..\asn.1\asn_application.h" />
    3.79 +    <ClInclude Include="..\..\asn.1\asn_codecs.h" />
    3.80 +    <ClInclude Include="..\..\asn.1\asn_codecs_prim.h" />
    3.81 +    <ClInclude Include="..\..\asn.1\asn_internal.h" />
    3.82 +    <ClInclude Include="..\..\asn.1\asn_SEQUENCE_OF.h" />
    3.83 +    <ClInclude Include="..\..\asn.1\asn_SET_OF.h" />
    3.84 +    <ClInclude Include="..\..\asn.1\asn_system.h" />
    3.85 +    <ClInclude Include="..\..\asn.1\Beacon.h" />
    3.86 +    <ClInclude Include="..\..\asn.1\ber_decoder.h" />
    3.87 +    <ClInclude Include="..\..\asn.1\ber_tlv_length.h" />
    3.88 +    <ClInclude Include="..\..\asn.1\ber_tlv_tag.h" />
    3.89 +    <ClInclude Include="..\..\asn.1\BIT_STRING.h" />
    3.90 +    <ClInclude Include="..\..\asn.1\BOOLEAN.h" />
    3.91 +    <ClInclude Include="..\..\asn.1\Command.h" />
    3.92 +    <ClInclude Include="..\..\asn.1\Commands.h" />
    3.93 +    <ClInclude Include="..\..\asn.1\CommitAccept.h" />
    3.94 +    <ClInclude Include="..\..\asn.1\CommitAcceptForGroup.h" />
    3.95 +    <ClInclude Include="..\..\asn.1\CommitAcceptOfferer.h" />
    3.96 +    <ClInclude Include="..\..\asn.1\CommitAcceptRequester.h" />
    3.97 +    <ClInclude Include="..\..\asn.1\CommitReject.h" />
    3.98 +    <ClInclude Include="..\..\asn.1\constraints.h" />
    3.99 +    <ClInclude Include="..\..\asn.1\constr_CHOICE.h" />
   3.100 +    <ClInclude Include="..\..\asn.1\constr_SEQUENCE.h" />
   3.101 +    <ClInclude Include="..\..\asn.1\constr_SEQUENCE_OF.h" />
   3.102 +    <ClInclude Include="..\..\asn.1\constr_SET_OF.h" />
   3.103 +    <ClInclude Include="..\..\asn.1\constr_TYPE.h" />
   3.104 +    <ClInclude Include="..\..\asn.1\der_encoder.h" />
   3.105 +    <ClInclude Include="..\..\asn.1\Distribution.h" />
   3.106 +    <ClInclude Include="..\..\asn.1\ElectGroupKeyResetLeader.h" />
   3.107 +    <ClInclude Include="..\..\asn.1\GroupHandshake.h" />
   3.108 +    <ClInclude Include="..\..\asn.1\GroupKeysAndClose.h" />
   3.109 +    <ClInclude Include="..\..\asn.1\GroupKeysForNewMember.h" />
   3.110 +    <ClInclude Include="..\..\asn.1\GroupKeysUpdate.h" />
   3.111 +    <ClInclude Include="..\..\asn.1\GroupTrustThisKey.h" />
   3.112 +    <ClInclude Include="..\..\asn.1\Hash.h" />
   3.113 +    <ClInclude Include="..\..\asn.1\Hex.h" />
   3.114 +    <ClInclude Include="..\..\asn.1\Identity.h" />
   3.115 +    <ClInclude Include="..\..\asn.1\IdentityList.h" />
   3.116 +    <ClInclude Include="..\..\asn.1\InitUnledGroupKeyReset.h" />
   3.117 +    <ClInclude Include="..\..\asn.1\INTEGER.h" />
   3.118 +    <ClInclude Include="..\..\asn.1\ISO639-1.h" />
   3.119 +    <ClInclude Include="..\..\asn.1\KeyReset.h" />
   3.120 +    <ClInclude Include="..\..\asn.1\KeySync.h" />
   3.121 +    <ClInclude Include="..\..\asn.1\NativeEnumerated.h" />
   3.122 +    <ClInclude Include="..\..\asn.1\NativeInteger.h" />
   3.123 +    <ClInclude Include="..\..\asn.1\NegotiationOpen.h" />
   3.124 +    <ClInclude Include="..\..\asn.1\NegotiationRequest.h" />
   3.125 +    <ClInclude Include="..\..\asn.1\NegotiationRequestGrouped.h" />
   3.126 +    <ClInclude Include="..\..\asn.1\OCTET_STRING.h" />
   3.127 +    <ClInclude Include="..\..\asn.1\OwnKeysOfferer.h" />
   3.128 +    <ClInclude Include="..\..\asn.1\OwnKeysRequester.h" />
   3.129 +    <ClInclude Include="..\..\asn.1\per_decoder.h" />
   3.130 +    <ClInclude Include="..\..\asn.1\per_encoder.h" />
   3.131 +    <ClInclude Include="..\..\asn.1\per_opentype.h" />
   3.132 +    <ClInclude Include="..\..\asn.1\per_support.h" />
   3.133 +    <ClInclude Include="..\..\asn.1\PrintableString.h" />
   3.134 +    <ClInclude Include="..\..\asn.1\PString.h" />
   3.135 +    <ClInclude Include="..\..\asn.1\Rollback.h" />
   3.136 +    <ClInclude Include="..\..\asn.1\Sync.h" />
   3.137 +    <ClInclude Include="..\..\asn.1\SynchronizeGroupKeys.h" />
   3.138 +    <ClInclude Include="..\..\asn.1\TID.h" />
   3.139 +    <ClInclude Include="..\..\asn.1\UTF8String.h" />
   3.140 +    <ClInclude Include="..\..\asn.1\Version.h" />
   3.141 +    <ClInclude Include="..\..\asn.1\xer_decoder.h" />
   3.142 +    <ClInclude Include="..\..\asn.1\xer_encoder.h" />
   3.143 +    <ClInclude Include="..\..\asn.1\xer_support.h" />
   3.144    </ItemGroup>
   3.145    <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   3.146    <ImportGroup Label="ExtensionTargets" />
     4.1 --- a/build-windows/libpEpasn1/libpEpasn1.vcxproj.filters	Tue Jun 30 14:56:25 2020 +0200
     4.2 +++ b/build-windows/libpEpasn1/libpEpasn1.vcxproj.filters	Mon Jul 13 13:41:27 2020 +0200
     4.3 @@ -18,1705 +18,397 @@
     4.4      <Text Include="ReadMe.txt" />
     4.5    </ItemGroup>
     4.6    <ItemGroup>
     4.7 -    <ClInclude Include="..\..\asn.1\*.h">
     4.8 -      <Filter>Header Files</Filter>
     4.9 -    </ClInclude>
    4.10 -    <ClInclude Include="..\..\asn.1\*.h">
    4.11 -      <Filter>Header Files</Filter>
    4.12 -    </ClInclude>
    4.13 -    <ClInclude Include="..\..\asn.1\*.h">
    4.14 -      <Filter>Header Files</Filter>
    4.15 -    </ClInclude>
    4.16 -    <ClInclude Include="..\..\asn.1\*.h">
    4.17 -      <Filter>Header Files</Filter>
    4.18 -    </ClInclude>
    4.19 -    <ClInclude Include="..\..\asn.1\*.h">
    4.20 -      <Filter>Header Files</Filter>
    4.21 -    </ClInclude>
    4.22 -    <ClInclude Include="..\..\asn.1\*.h">
    4.23 -      <Filter>Header Files</Filter>
    4.24 -    </ClInclude>
    4.25 -    <ClInclude Include="..\..\asn.1\*.h">
    4.26 -      <Filter>Header Files</Filter>
    4.27 -    </ClInclude>
    4.28 -    <ClInclude Include="..\..\asn.1\*.h">
    4.29 -      <Filter>Header Files</Filter>
    4.30 -    </ClInclude>
    4.31 -    <ClInclude Include="..\..\asn.1\*.h">
    4.32 -      <Filter>Header Files</Filter>
    4.33 -    </ClInclude>
    4.34 -    <ClInclude Include="..\..\asn.1\*.h">
    4.35 -      <Filter>Header Files</Filter>
    4.36 -    </ClInclude>
    4.37 -    <ClInclude Include="..\..\asn.1\*.h">
    4.38 -      <Filter>Header Files</Filter>
    4.39 -    </ClInclude>
    4.40 -    <ClInclude Include="..\..\asn.1\*.h">
    4.41 -      <Filter>Header Files</Filter>
    4.42 -    </ClInclude>
    4.43 -    <ClInclude Include="..\..\asn.1\*.h">
    4.44 -      <Filter>Header Files</Filter>
    4.45 -    </ClInclude>
    4.46 -    <ClInclude Include="..\..\asn.1\*.h">
    4.47 -      <Filter>Header Files</Filter>
    4.48 -    </ClInclude>
    4.49 -    <ClInclude Include="..\..\asn.1\*.h">
    4.50 -      <Filter>Header Files</Filter>
    4.51 -    </ClInclude>
    4.52 -    <ClInclude Include="..\..\asn.1\*.h">
    4.53 -      <Filter>Header Files</Filter>
    4.54 -    </ClInclude>
    4.55 -    <ClInclude Include="..\..\asn.1\*.h">
    4.56 -      <Filter>Header Files</Filter>
    4.57 -    </ClInclude>
    4.58 -    <ClInclude Include="..\..\asn.1\*.h">
    4.59 -      <Filter>Header Files</Filter>
    4.60 -    </ClInclude>
    4.61 -    <ClInclude Include="..\..\asn.1\*.h">
    4.62 -      <Filter>Header Files</Filter>
    4.63 -    </ClInclude>
    4.64 -    <ClInclude Include="..\..\asn.1\*.h">
    4.65 -      <Filter>Header Files</Filter>
    4.66 -    </ClInclude>
    4.67 -    <ClInclude Include="..\..\asn.1\*.h">
    4.68 -      <Filter>Header Files</Filter>
    4.69 -    </ClInclude>
    4.70 -    <ClInclude Include="..\..\asn.1\*.h">
    4.71 -      <Filter>Header Files</Filter>
    4.72 -    </ClInclude>
    4.73 -    <ClInclude Include="..\..\asn.1\*.h">
    4.74 -      <Filter>Header Files</Filter>
    4.75 -    </ClInclude>
    4.76 -    <ClInclude Include="..\..\asn.1\*.h">
    4.77 -      <Filter>Header Files</Filter>
    4.78 -    </ClInclude>
    4.79 -    <ClInclude Include="..\..\asn.1\*.h">
    4.80 -      <Filter>Header Files</Filter>
    4.81 -    </ClInclude>
    4.82 -    <ClInclude Include="..\..\asn.1\*.h">
    4.83 -      <Filter>Header Files</Filter>
    4.84 -    </ClInclude>
    4.85 -    <ClInclude Include="..\..\asn.1\*.h">
    4.86 -      <Filter>Header Files</Filter>
    4.87 -    </ClInclude>
    4.88 -    <ClInclude Include="..\..\asn.1\*.h">
    4.89 -      <Filter>Header Files</Filter>
    4.90 -    </ClInclude>
    4.91 -    <ClInclude Include="..\..\asn.1\*.h">
    4.92 -      <Filter>Header Files</Filter>
    4.93 -    </ClInclude>
    4.94 -    <ClInclude Include="..\..\asn.1\*.h">
    4.95 -      <Filter>Header Files</Filter>
    4.96 -    </ClInclude>
    4.97 -    <ClInclude Include="..\..\asn.1\*.h">
    4.98 -      <Filter>Header Files</Filter>
    4.99 -    </ClInclude>
   4.100 -    <ClInclude Include="..\..\asn.1\*.h">
   4.101 -      <Filter>Header Files</Filter>
   4.102 -    </ClInclude>
   4.103 -    <ClInclude Include="..\..\asn.1\*.h">
   4.104 -      <Filter>Header Files</Filter>
   4.105 -    </ClInclude>
   4.106 -    <ClInclude Include="..\..\asn.1\*.h">
   4.107 -      <Filter>Header Files</Filter>
   4.108 -    </ClInclude>
   4.109 -    <ClInclude Include="..\..\asn.1\*.h">
   4.110 -      <Filter>Header Files</Filter>
   4.111 -    </ClInclude>
   4.112 -    <ClInclude Include="..\..\asn.1\*.h">
   4.113 -      <Filter>Header Files</Filter>
   4.114 -    </ClInclude>
   4.115 -    <ClInclude Include="..\..\asn.1\*.h">
   4.116 -      <Filter>Header Files</Filter>
   4.117 -    </ClInclude>
   4.118 -    <ClInclude Include="..\..\asn.1\*.h">
   4.119 -      <Filter>Header Files</Filter>
   4.120 -    </ClInclude>
   4.121 -    <ClInclude Include="..\..\asn.1\*.h">
   4.122 -      <Filter>Header Files</Filter>
   4.123 -    </ClInclude>
   4.124 -    <ClInclude Include="..\..\asn.1\*.h">
   4.125 -      <Filter>Header Files</Filter>
   4.126 -    </ClInclude>
   4.127 -    <ClInclude Include="..\..\asn.1\*.h">
   4.128 -      <Filter>Header Files</Filter>
   4.129 -    </ClInclude>
   4.130 -    <ClInclude Include="..\..\asn.1\*.h">
   4.131 -      <Filter>Header Files</Filter>
   4.132 -    </ClInclude>
   4.133 -    <ClInclude Include="..\..\asn.1\*.h">
   4.134 -      <Filter>Header Files</Filter>
   4.135 -    </ClInclude>
   4.136 -    <ClInclude Include="..\..\asn.1\*.h">
   4.137 -      <Filter>Header Files</Filter>
   4.138 -    </ClInclude>
   4.139 -    <ClInclude Include="..\..\asn.1\*.h">
   4.140 -      <Filter>Header Files</Filter>
   4.141 -    </ClInclude>
   4.142 -    <ClInclude Include="..\..\asn.1\*.h">
   4.143 -      <Filter>Header Files</Filter>
   4.144 -    </ClInclude>
   4.145 -    <ClInclude Include="..\..\asn.1\*.h">
   4.146 -      <Filter>Header Files</Filter>
   4.147 -    </ClInclude>
   4.148 -    <ClInclude Include="..\..\asn.1\*.h">
   4.149 -      <Filter>Header Files</Filter>
   4.150 -    </ClInclude>
   4.151 -    <ClInclude Include="..\..\asn.1\*.h">
   4.152 -      <Filter>Header Files</Filter>
   4.153 -    </ClInclude>
   4.154 -    <ClInclude Include="..\..\asn.1\*.h">
   4.155 -      <Filter>Header Files</Filter>
   4.156 -    </ClInclude>
   4.157 -    <ClInclude Include="..\..\asn.1\*.h">
   4.158 -      <Filter>Header Files</Filter>
   4.159 -    </ClInclude>
   4.160 -    <ClInclude Include="..\..\asn.1\*.h">
   4.161 -      <Filter>Header Files</Filter>
   4.162 -    </ClInclude>
   4.163 -    <ClInclude Include="..\..\asn.1\*.h">
   4.164 -      <Filter>Header Files</Filter>
   4.165 -    </ClInclude>
   4.166 -    <ClInclude Include="..\..\asn.1\*.h">
   4.167 -      <Filter>Header Files</Filter>
   4.168 -    </ClInclude>
   4.169 -    <ClInclude Include="..\..\asn.1\*.h">
   4.170 -      <Filter>Header Files</Filter>
   4.171 -    </ClInclude>
   4.172 -    <ClInclude Include="..\..\asn.1\*.h">
   4.173 -      <Filter>Header Files</Filter>
   4.174 -    </ClInclude>
   4.175 -    <ClInclude Include="..\..\asn.1\*.h">
   4.176 -      <Filter>Header Files</Filter>
   4.177 -    </ClInclude>
   4.178 -    <ClInclude Include="..\..\asn.1\*.h">
   4.179 -      <Filter>Header Files</Filter>
   4.180 -    </ClInclude>
   4.181 -    <ClInclude Include="..\..\asn.1\*.h">
   4.182 -      <Filter>Header Files</Filter>
   4.183 -    </ClInclude>
   4.184 -    <ClInclude Include="..\..\asn.1\*.h">
   4.185 -      <Filter>Header Files</Filter>
   4.186 -    </ClInclude>
   4.187 -    <ClInclude Include="..\..\asn.1\*.h">
   4.188 -      <Filter>Header Files</Filter>
   4.189 -    </ClInclude>
   4.190 -    <ClInclude Include="..\..\asn.1\*.h">
   4.191 -      <Filter>Header Files</Filter>
   4.192 -    </ClInclude>
   4.193 -    <ClInclude Include="..\..\asn.1\*.h">
   4.194 -      <Filter>Header Files</Filter>
   4.195 -    </ClInclude>
   4.196 -    <ClInclude Include="..\..\asn.1\*.h">
   4.197 -      <Filter>Header Files</Filter>
   4.198 -    </ClInclude>
   4.199 -    <ClInclude Include="..\..\asn.1\*.h">
   4.200 -      <Filter>Header Files</Filter>
   4.201 -    </ClInclude>
   4.202 -    <ClInclude Include="..\..\asn.1\*.h">
   4.203 -      <Filter>Header Files</Filter>
   4.204 -    </ClInclude>
   4.205 -    <ClInclude Include="..\..\asn.1\*.h">
   4.206 -      <Filter>Header Files</Filter>
   4.207 -    </ClInclude>
   4.208 -    <ClInclude Include="..\..\asn.1\*.h">
   4.209 -      <Filter>Header Files</Filter>
   4.210 -    </ClInclude>
   4.211 -    <ClInclude Include="..\..\asn.1\*.h">
   4.212 -      <Filter>Header Files</Filter>
   4.213 -    </ClInclude>
   4.214 -    <ClInclude Include="..\..\asn.1\*.h">
   4.215 -      <Filter>Header Files</Filter>
   4.216 -    </ClInclude>
   4.217 -    <ClInclude Include="..\..\asn.1\*.h">
   4.218 -      <Filter>Header Files</Filter>
   4.219 -    </ClInclude>
   4.220 -    <ClInclude Include="..\..\asn.1\*.h">
   4.221 -      <Filter>Header Files</Filter>
   4.222 -    </ClInclude>
   4.223 -    <ClInclude Include="..\..\asn.1\*.h">
   4.224 -      <Filter>Header Files</Filter>
   4.225 -    </ClInclude>
   4.226 -    <ClInclude Include="..\..\asn.1\*.h">
   4.227 -      <Filter>Header Files</Filter>
   4.228 -    </ClInclude>
   4.229 -    <ClInclude Include="..\..\asn.1\*.h">
   4.230 -      <Filter>Header Files</Filter>
   4.231 -    </ClInclude>
   4.232 -    <ClInclude Include="..\..\asn.1\*.h">
   4.233 -      <Filter>Header Files</Filter>
   4.234 -    </ClInclude>
   4.235 -    <ClInclude Include="..\..\asn.1\*.h">
   4.236 -      <Filter>Header Files</Filter>
   4.237 -    </ClInclude>
   4.238 -    <ClInclude Include="..\..\asn.1\*.h">
   4.239 -      <Filter>Header Files</Filter>
   4.240 -    </ClInclude>
   4.241 -    <ClInclude Include="..\..\asn.1\*.h">
   4.242 -      <Filter>Header Files</Filter>
   4.243 -    </ClInclude>
   4.244 -    <ClInclude Include="..\..\asn.1\*.h">
   4.245 -      <Filter>Header Files</Filter>
   4.246 -    </ClInclude>
   4.247 -    <ClInclude Include="..\..\asn.1\*.h">
   4.248 -      <Filter>Header Files</Filter>
   4.249 -    </ClInclude>
   4.250 -    <ClInclude Include="..\..\asn.1\*.h">
   4.251 -      <Filter>Header Files</Filter>
   4.252 -    </ClInclude>
   4.253 -    <ClInclude Include="..\..\asn.1\*.h">
   4.254 -      <Filter>Header Files</Filter>
   4.255 -    </ClInclude>
   4.256 -    <ClInclude Include="..\..\asn.1\*.h">
   4.257 -      <Filter>Header Files</Filter>
   4.258 -    </ClInclude>
   4.259 -    <ClInclude Include="..\..\asn.1\*.h">
   4.260 -      <Filter>Header Files</Filter>
   4.261 -    </ClInclude>
   4.262 -    <ClInclude Include="..\..\asn.1\*.h">
   4.263 -      <Filter>Header Files</Filter>
   4.264 -    </ClInclude>
   4.265 -    <ClInclude Include="..\..\asn.1\*.h">
   4.266 -      <Filter>Header Files</Filter>
   4.267 -    </ClInclude>
   4.268 -    <ClInclude Include="..\..\asn.1\*.h">
   4.269 -      <Filter>Header Files</Filter>
   4.270 -    </ClInclude>
   4.271 -    <ClInclude Include="..\..\asn.1\*.h">
   4.272 -      <Filter>Header Files</Filter>
   4.273 -    </ClInclude>
   4.274 -    <ClInclude Include="..\..\asn.1\*.h">
   4.275 -      <Filter>Header Files</Filter>
   4.276 -    </ClInclude>
   4.277 -    <ClInclude Include="..\..\asn.1\*.h">
   4.278 -      <Filter>Header Files</Filter>
   4.279 -    </ClInclude>
   4.280 -    <ClInclude Include="..\..\asn.1\*.h">
   4.281 -      <Filter>Header Files</Filter>
   4.282 -    </ClInclude>
   4.283 -    <ClInclude Include="..\..\asn.1\*.h">
   4.284 -      <Filter>Header Files</Filter>
   4.285 -    </ClInclude>
   4.286 -    <ClInclude Include="..\..\asn.1\*.h">
   4.287 -      <Filter>Header Files</Filter>
   4.288 -    </ClInclude>
   4.289 -    <ClInclude Include="..\..\asn.1\*.h">
   4.290 -      <Filter>Header Files</Filter>
   4.291 -    </ClInclude>
   4.292 -    <ClInclude Include="..\..\asn.1\*.h">
   4.293 -      <Filter>Header Files</Filter>
   4.294 -    </ClInclude>
   4.295 -    <ClInclude Include="..\..\asn.1\*.h">
   4.296 -      <Filter>Header Files</Filter>
   4.297 -    </ClInclude>
   4.298 -    <ClInclude Include="..\..\asn.1\*.h">
   4.299 -      <Filter>Header Files</Filter>
   4.300 -    </ClInclude>
   4.301 -    <ClInclude Include="..\..\asn.1\*.h">
   4.302 -      <Filter>Header Files</Filter>
   4.303 -    </ClInclude>
   4.304 -    <ClInclude Include="..\..\asn.1\*.h">
   4.305 -      <Filter>Header Files</Filter>
   4.306 -    </ClInclude>
   4.307 -    <ClInclude Include="..\..\asn.1\*.h">
   4.308 -      <Filter>Header Files</Filter>
   4.309 -    </ClInclude>
   4.310 -    <ClInclude Include="..\..\asn.1\*.h">
   4.311 -      <Filter>Header Files</Filter>
   4.312 -    </ClInclude>
   4.313 -    <ClInclude Include="..\..\asn.1\*.h">
   4.314 -      <Filter>Header Files</Filter>
   4.315 -    </ClInclude>
   4.316 -    <ClInclude Include="..\..\asn.1\*.h">
   4.317 -      <Filter>Header Files</Filter>
   4.318 -    </ClInclude>
   4.319 -    <ClInclude Include="..\..\asn.1\*.h">
   4.320 -      <Filter>Header Files</Filter>
   4.321 -    </ClInclude>
   4.322 -    <ClInclude Include="..\..\asn.1\*.h">
   4.323 -      <Filter>Header Files</Filter>
   4.324 -    </ClInclude>
   4.325 -    <ClInclude Include="..\..\asn.1\*.h">
   4.326 -      <Filter>Header Files</Filter>
   4.327 -    </ClInclude>
   4.328 -    <ClInclude Include="..\..\asn.1\*.h">
   4.329 -      <Filter>Header Files</Filter>
   4.330 -    </ClInclude>
   4.331 -    <ClInclude Include="..\..\asn.1\*.h">
   4.332 -      <Filter>Header Files</Filter>
   4.333 -    </ClInclude>
   4.334 -    <ClInclude Include="..\..\asn.1\*.h">
   4.335 -      <Filter>Header Files</Filter>
   4.336 -    </ClInclude>
   4.337 -    <ClInclude Include="..\..\asn.1\*.h">
   4.338 -      <Filter>Header Files</Filter>
   4.339 -    </ClInclude>
   4.340 -    <ClInclude Include="..\..\asn.1\*.h">
   4.341 -      <Filter>Header Files</Filter>
   4.342 -    </ClInclude>
   4.343 -    <ClInclude Include="..\..\asn.1\*.h">
   4.344 -      <Filter>Header Files</Filter>
   4.345 -    </ClInclude>
   4.346 -    <ClInclude Include="..\..\asn.1\*.h">
   4.347 -      <Filter>Header Files</Filter>
   4.348 -    </ClInclude>
   4.349 -    <ClInclude Include="..\..\asn.1\*.h">
   4.350 -      <Filter>Header Files</Filter>
   4.351 -    </ClInclude>
   4.352 -    <ClInclude Include="..\..\asn.1\*.h">
   4.353 -      <Filter>Header Files</Filter>
   4.354 -    </ClInclude>
   4.355 -    <ClInclude Include="..\..\asn.1\*.h">
   4.356 -      <Filter>Header Files</Filter>
   4.357 -    </ClInclude>
   4.358 -    <ClInclude Include="..\..\asn.1\*.h">
   4.359 -      <Filter>Header Files</Filter>
   4.360 -    </ClInclude>
   4.361 -    <ClInclude Include="..\..\asn.1\*.h">
   4.362 -      <Filter>Header Files</Filter>
   4.363 -    </ClInclude>
   4.364 -    <ClInclude Include="..\..\asn.1\*.h">
   4.365 -      <Filter>Header Files</Filter>
   4.366 -    </ClInclude>
   4.367 -    <ClInclude Include="..\..\asn.1\*.h">
   4.368 -      <Filter>Header Files</Filter>
   4.369 -    </ClInclude>
   4.370 -    <ClInclude Include="..\..\asn.1\*.h">
   4.371 -      <Filter>Header Files</Filter>
   4.372 -    </ClInclude>
   4.373 -    <ClInclude Include="..\..\asn.1\*.h">
   4.374 -      <Filter>Header Files</Filter>
   4.375 -    </ClInclude>
   4.376 -    <ClInclude Include="..\..\asn.1\*.h">
   4.377 -      <Filter>Header Files</Filter>
   4.378 -    </ClInclude>
   4.379 -    <ClInclude Include="..\..\asn.1\*.h">
   4.380 -      <Filter>Header Files</Filter>
   4.381 -    </ClInclude>
   4.382 -    <ClInclude Include="..\..\asn.1\*.h">
   4.383 -      <Filter>Header Files</Filter>
   4.384 -    </ClInclude>
   4.385 -    <ClInclude Include="..\..\asn.1\*.h">
   4.386 -      <Filter>Header Files</Filter>
   4.387 -    </ClInclude>
   4.388 -    <ClInclude Include="..\..\asn.1\*.h">
   4.389 -      <Filter>Header Files</Filter>
   4.390 -    </ClInclude>
   4.391 -    <ClInclude Include="..\..\asn.1\*.h">
   4.392 -      <Filter>Header Files</Filter>
   4.393 -    </ClInclude>
   4.394 -    <ClInclude Include="..\..\asn.1\*.h">
   4.395 -      <Filter>Header Files</Filter>
   4.396 -    </ClInclude>
   4.397 -    <ClInclude Include="..\..\asn.1\*.h">
   4.398 -      <Filter>Header Files</Filter>
   4.399 -    </ClInclude>
   4.400 -    <ClInclude Include="..\..\asn.1\*.h">
   4.401 -      <Filter>Header Files</Filter>
   4.402 -    </ClInclude>
   4.403 -    <ClInclude Include="..\..\asn.1\*.h">
   4.404 -      <Filter>Header Files</Filter>
   4.405 -    </ClInclude>
   4.406 -    <ClInclude Include="..\..\asn.1\*.h">
   4.407 -      <Filter>Header Files</Filter>
   4.408 -    </ClInclude>
   4.409 -    <ClInclude Include="..\..\asn.1\*.h">
   4.410 -      <Filter>Header Files</Filter>
   4.411 -    </ClInclude>
   4.412 -    <ClInclude Include="..\..\asn.1\*.h">
   4.413 -      <Filter>Header Files</Filter>
   4.414 -    </ClInclude>
   4.415 -    <ClInclude Include="..\..\asn.1\*.h">
   4.416 -      <Filter>Header Files</Filter>
   4.417 -    </ClInclude>
   4.418 -    <ClInclude Include="..\..\asn.1\*.h">
   4.419 -      <Filter>Header Files</Filter>
   4.420 -    </ClInclude>
   4.421 -    <ClInclude Include="..\..\asn.1\*.h">
   4.422 -      <Filter>Header Files</Filter>
   4.423 -    </ClInclude>
   4.424 -    <ClInclude Include="..\..\asn.1\*.h">
   4.425 -      <Filter>Header Files</Filter>
   4.426 -    </ClInclude>
   4.427 -    <ClInclude Include="..\..\asn.1\*.h">
   4.428 -      <Filter>Header Files</Filter>
   4.429 -    </ClInclude>
   4.430 -    <ClInclude Include="..\..\asn.1\*.h">
   4.431 -      <Filter>Header Files</Filter>
   4.432 -    </ClInclude>
   4.433 -    <ClInclude Include="..\..\asn.1\*.h">
   4.434 -      <Filter>Header Files</Filter>
   4.435 -    </ClInclude>
   4.436 -    <ClInclude Include="..\..\asn.1\*.h">
   4.437 -      <Filter>Header Files</Filter>
   4.438 -    </ClInclude>
   4.439 -    <ClInclude Include="..\..\asn.1\*.h">
   4.440 -      <Filter>Header Files</Filter>
   4.441 -    </ClInclude>
   4.442 -    <ClInclude Include="..\..\asn.1\*.h">
   4.443 -      <Filter>Header Files</Filter>
   4.444 -    </ClInclude>
   4.445 -    <ClInclude Include="..\..\asn.1\*.h">
   4.446 -      <Filter>Header Files</Filter>
   4.447 -    </ClInclude>
   4.448 -    <ClInclude Include="..\..\asn.1\*.h">
   4.449 -      <Filter>Header Files</Filter>
   4.450 -    </ClInclude>
   4.451 -    <ClInclude Include="..\..\asn.1\*.h">
   4.452 -      <Filter>Header Files</Filter>
   4.453 -    </ClInclude>
   4.454 -    <ClInclude Include="..\..\asn.1\*.h">
   4.455 -      <Filter>Header Files</Filter>
   4.456 -    </ClInclude>
   4.457 -    <ClInclude Include="..\..\asn.1\*.h">
   4.458 -      <Filter>Header Files</Filter>
   4.459 -    </ClInclude>
   4.460 -    <ClInclude Include="..\..\asn.1\*.h">
   4.461 -      <Filter>Header Files</Filter>
   4.462 -    </ClInclude>
   4.463 -    <ClInclude Include="..\..\asn.1\*.h">
   4.464 -      <Filter>Header Files</Filter>
   4.465 -    </ClInclude>
   4.466 -    <ClInclude Include="..\..\asn.1\*.h">
   4.467 -      <Filter>Header Files</Filter>
   4.468 -    </ClInclude>
   4.469 -    <ClInclude Include="..\..\asn.1\*.h">
   4.470 -      <Filter>Header Files</Filter>
   4.471 -    </ClInclude>
   4.472 -    <ClInclude Include="..\..\asn.1\*.h">
   4.473 -      <Filter>Header Files</Filter>
   4.474 -    </ClInclude>
   4.475 -    <ClInclude Include="..\..\asn.1\*.h">
   4.476 -      <Filter>Header Files</Filter>
   4.477 -    </ClInclude>
   4.478 -    <ClInclude Include="..\..\asn.1\*.h">
   4.479 -      <Filter>Header Files</Filter>
   4.480 -    </ClInclude>
   4.481 -    <ClInclude Include="..\..\asn.1\*.h">
   4.482 -      <Filter>Header Files</Filter>
   4.483 -    </ClInclude>
   4.484 -    <ClInclude Include="..\..\asn.1\*.h">
   4.485 -      <Filter>Header Files</Filter>
   4.486 -    </ClInclude>
   4.487 -    <ClInclude Include="..\..\asn.1\*.h">
   4.488 -      <Filter>Header Files</Filter>
   4.489 -    </ClInclude>
   4.490 -    <ClInclude Include="..\..\asn.1\*.h">
   4.491 -      <Filter>Header Files</Filter>
   4.492 -    </ClInclude>
   4.493 -    <ClInclude Include="..\..\asn.1\*.h">
   4.494 -      <Filter>Header Files</Filter>
   4.495 -    </ClInclude>
   4.496 -    <ClInclude Include="..\..\asn.1\*.h">
   4.497 -      <Filter>Header Files</Filter>
   4.498 -    </ClInclude>
   4.499 -    <ClInclude Include="..\..\asn.1\*.h">
   4.500 -      <Filter>Header Files</Filter>
   4.501 -    </ClInclude>
   4.502 -    <ClInclude Include="..\..\asn.1\*.h">
   4.503 -      <Filter>Header Files</Filter>
   4.504 -    </ClInclude>
   4.505 -    <ClInclude Include="..\..\asn.1\*.h">
   4.506 -      <Filter>Header Files</Filter>
   4.507 -    </ClInclude>
   4.508 -    <ClInclude Include="..\..\asn.1\*.h">
   4.509 -      <Filter>Header Files</Filter>
   4.510 -    </ClInclude>
   4.511 -    <ClInclude Include="..\..\asn.1\*.h">
   4.512 -      <Filter>Header Files</Filter>
   4.513 -    </ClInclude>
   4.514 -    <ClInclude Include="..\..\asn.1\*.h">
   4.515 -      <Filter>Header Files</Filter>
   4.516 -    </ClInclude>
   4.517 -    <ClInclude Include="..\..\asn.1\*.h">
   4.518 -      <Filter>Header Files</Filter>
   4.519 -    </ClInclude>
   4.520 -    <ClInclude Include="..\..\asn.1\*.h">
   4.521 -      <Filter>Header Files</Filter>
   4.522 -    </ClInclude>
   4.523 -    <ClInclude Include="..\..\asn.1\*.h">
   4.524 -      <Filter>Header Files</Filter>
   4.525 -    </ClInclude>
   4.526 -    <ClInclude Include="..\..\asn.1\*.h">
   4.527 -      <Filter>Header Files</Filter>
   4.528 -    </ClInclude>
   4.529 -    <ClInclude Include="..\..\asn.1\*.h">
   4.530 -      <Filter>Header Files</Filter>
   4.531 -    </ClInclude>
   4.532 -    <ClInclude Include="..\..\asn.1\*.h">
   4.533 -      <Filter>Header Files</Filter>
   4.534 -    </ClInclude>
   4.535 -    <ClInclude Include="..\..\asn.1\*.h">
   4.536 -      <Filter>Header Files</Filter>
   4.537 -    </ClInclude>
   4.538 -    <ClInclude Include="..\..\asn.1\*.h">
   4.539 -      <Filter>Header Files</Filter>
   4.540 -    </ClInclude>
   4.541 -    <ClInclude Include="..\..\asn.1\*.h">
   4.542 -      <Filter>Header Files</Filter>
   4.543 -    </ClInclude>
   4.544 -    <ClInclude Include="..\..\asn.1\*.h">
   4.545 -      <Filter>Header Files</Filter>
   4.546 -    </ClInclude>
   4.547 -    <ClInclude Include="..\..\asn.1\*.h">
   4.548 -      <Filter>Header Files</Filter>
   4.549 -    </ClInclude>
   4.550 -    <ClInclude Include="..\..\asn.1\*.h">
   4.551 -      <Filter>Header Files</Filter>
   4.552 -    </ClInclude>
   4.553 -    <ClInclude Include="..\..\asn.1\*.h">
   4.554 -      <Filter>Header Files</Filter>
   4.555 -    </ClInclude>
   4.556 -    <ClInclude Include="..\..\asn.1\*.h">
   4.557 -      <Filter>Header Files</Filter>
   4.558 -    </ClInclude>
   4.559 -    <ClInclude Include="..\..\asn.1\*.h">
   4.560 -      <Filter>Header Files</Filter>
   4.561 -    </ClInclude>
   4.562 -    <ClInclude Include="..\..\asn.1\*.h">
   4.563 -      <Filter>Header Files</Filter>
   4.564 -    </ClInclude>
   4.565 -    <ClInclude Include="..\..\asn.1\*.h">
   4.566 -      <Filter>Header Files</Filter>
   4.567 -    </ClInclude>
   4.568 -    <ClInclude Include="..\..\asn.1\*.h">
   4.569 -      <Filter>Header Files</Filter>
   4.570 -    </ClInclude>
   4.571 -    <ClInclude Include="..\..\asn.1\*.h">
   4.572 -      <Filter>Header Files</Filter>
   4.573 -    </ClInclude>
   4.574 -    <ClInclude Include="..\..\asn.1\*.h">
   4.575 -      <Filter>Header Files</Filter>
   4.576 -    </ClInclude>
   4.577 -    <ClInclude Include="..\..\asn.1\*.h">
   4.578 -      <Filter>Header Files</Filter>
   4.579 -    </ClInclude>
   4.580 -    <ClInclude Include="..\..\asn.1\*.h">
   4.581 -      <Filter>Header Files</Filter>
   4.582 -    </ClInclude>
   4.583 -    <ClInclude Include="..\..\asn.1\*.h">
   4.584 -      <Filter>Header Files</Filter>
   4.585 -    </ClInclude>
   4.586 -    <ClInclude Include="..\..\asn.1\*.h">
   4.587 -      <Filter>Header Files</Filter>
   4.588 -    </ClInclude>
   4.589 -    <ClInclude Include="..\..\asn.1\*.h">
   4.590 -      <Filter>Header Files</Filter>
   4.591 -    </ClInclude>
   4.592 -    <ClInclude Include="..\..\asn.1\*.h">
   4.593 -      <Filter>Header Files</Filter>
   4.594 -    </ClInclude>
   4.595 -    <ClInclude Include="..\..\asn.1\*.h">
   4.596 -      <Filter>Header Files</Filter>
   4.597 -    </ClInclude>
   4.598 -    <ClInclude Include="..\..\asn.1\*.h">
   4.599 -      <Filter>Header Files</Filter>
   4.600 -    </ClInclude>
   4.601 -    <ClInclude Include="..\..\asn.1\*.h">
   4.602 -      <Filter>Header Files</Filter>
   4.603 -    </ClInclude>
   4.604 -    <ClInclude Include="..\..\asn.1\*.h">
   4.605 -      <Filter>Header Files</Filter>
   4.606 -    </ClInclude>
   4.607 -    <ClInclude Include="..\..\asn.1\*.h">
   4.608 -      <Filter>Header Files</Filter>
   4.609 -    </ClInclude>
   4.610 -    <ClInclude Include="..\..\asn.1\*.h">
   4.611 -      <Filter>Header Files</Filter>
   4.612 -    </ClInclude>
   4.613 -    <ClInclude Include="..\..\asn.1\*.h">
   4.614 -      <Filter>Header Files</Filter>
   4.615 -    </ClInclude>
   4.616 -    <ClInclude Include="..\..\asn.1\*.h">
   4.617 -      <Filter>Header Files</Filter>
   4.618 -    </ClInclude>
   4.619 -    <ClInclude Include="..\..\asn.1\*.h">
   4.620 -      <Filter>Header Files</Filter>
   4.621 -    </ClInclude>
   4.622 -    <ClInclude Include="..\..\asn.1\*.h">
   4.623 -      <Filter>Header Files</Filter>
   4.624 -    </ClInclude>
   4.625 -    <ClInclude Include="..\..\asn.1\*.h">
   4.626 -      <Filter>Header Files</Filter>
   4.627 -    </ClInclude>
   4.628 -    <ClInclude Include="..\..\asn.1\*.h">
   4.629 -      <Filter>Header Files</Filter>
   4.630 -    </ClInclude>
   4.631 -    <ClInclude Include="..\..\asn.1\*.h">
   4.632 -      <Filter>Header Files</Filter>
   4.633 -    </ClInclude>
   4.634 -    <ClInclude Include="..\..\asn.1\*.h">
   4.635 -      <Filter>Header Files</Filter>
   4.636 -    </ClInclude>
   4.637 -    <ClInclude Include="..\..\asn.1\*.h">
   4.638 -      <Filter>Header Files</Filter>
   4.639 -    </ClInclude>
   4.640 -    <ClInclude Include="..\..\asn.1\*.h">
   4.641 -      <Filter>Header Files</Filter>
   4.642 -    </ClInclude>
   4.643 -    <ClInclude Include="..\..\asn.1\*.h">
   4.644 -      <Filter>Header Files</Filter>
   4.645 -    </ClInclude>
   4.646 -    <ClInclude Include="..\..\asn.1\*.h">
   4.647 -      <Filter>Header Files</Filter>
   4.648 -    </ClInclude>
   4.649 -    <ClInclude Include="..\..\asn.1\*.h">
   4.650 -      <Filter>Header Files</Filter>
   4.651 -    </ClInclude>
   4.652 -    <ClInclude Include="..\..\asn.1\*.h">
   4.653 -      <Filter>Header Files</Filter>
   4.654 -    </ClInclude>
   4.655 -    <ClInclude Include="..\..\asn.1\*.h">
   4.656 -      <Filter>Header Files</Filter>
   4.657 -    </ClInclude>
   4.658 -    <ClInclude Include="..\..\asn.1\*.h">
   4.659 -      <Filter>Header Files</Filter>
   4.660 -    </ClInclude>
   4.661 -    <ClInclude Include="..\..\asn.1\*.h">
   4.662 -      <Filter>Header Files</Filter>
   4.663 -    </ClInclude>
   4.664 -    <ClInclude Include="..\..\asn.1\*.h">
   4.665 -      <Filter>Header Files</Filter>
   4.666 -    </ClInclude>
   4.667 -    <ClInclude Include="..\..\asn.1\*.h">
   4.668 -      <Filter>Header Files</Filter>
   4.669 -    </ClInclude>
   4.670 -    <ClInclude Include="..\..\asn.1\*.h">
   4.671 -      <Filter>Header Files</Filter>
   4.672 -    </ClInclude>
   4.673 -    <ClInclude Include="..\..\asn.1\*.h">
   4.674 -      <Filter>Header Files</Filter>
   4.675 -    </ClInclude>
   4.676 -    <ClInclude Include="..\..\asn.1\*.h">
   4.677 -      <Filter>Header Files</Filter>
   4.678 -    </ClInclude>
   4.679 -    <ClInclude Include="..\..\asn.1\*.h">
   4.680 -      <Filter>Header Files</Filter>
   4.681 -    </ClInclude>
   4.682 -    <ClInclude Include="..\..\asn.1\*.h">
   4.683 -      <Filter>Header Files</Filter>
   4.684 -    </ClInclude>
   4.685 -    <ClInclude Include="..\..\asn.1\*.h">
   4.686 -      <Filter>Header Files</Filter>
   4.687 -    </ClInclude>
   4.688 -    <ClInclude Include="..\..\asn.1\*.h">
   4.689 -      <Filter>Header Files</Filter>
   4.690 -    </ClInclude>
   4.691 -    <ClInclude Include="..\..\asn.1\*.h">
   4.692 -      <Filter>Header Files</Filter>
   4.693 -    </ClInclude>
   4.694 -    <ClInclude Include="..\..\asn.1\*.h">
   4.695 -      <Filter>Header Files</Filter>
   4.696 -    </ClInclude>
   4.697 -    <ClInclude Include="..\..\asn.1\*.h">
   4.698 -      <Filter>Header Files</Filter>
   4.699 -    </ClInclude>
   4.700 -    <ClInclude Include="..\..\asn.1\*.h">
   4.701 -      <Filter>Header Files</Filter>
   4.702 -    </ClInclude>
   4.703 -    <ClInclude Include="..\..\asn.1\*.h">
   4.704 -      <Filter>Header Files</Filter>
   4.705 -    </ClInclude>
   4.706 -    <ClInclude Include="..\..\asn.1\*.h">
   4.707 -      <Filter>Header Files</Filter>
   4.708 -    </ClInclude>
   4.709 -    <ClInclude Include="..\..\asn.1\*.h">
   4.710 -      <Filter>Header Files</Filter>
   4.711 -    </ClInclude>
   4.712 -    <ClInclude Include="..\..\asn.1\*.h">
   4.713 -      <Filter>Header Files</Filter>
   4.714 -    </ClInclude>
   4.715 -    <ClInclude Include="..\..\asn.1\*.h">
   4.716 -      <Filter>Header Files</Filter>
   4.717 -    </ClInclude>
   4.718 -    <ClInclude Include="..\..\asn.1\*.h">
   4.719 -      <Filter>Header Files</Filter>
   4.720 -    </ClInclude>
   4.721 -    <ClInclude Include="..\..\asn.1\*.h">
   4.722 -      <Filter>Header Files</Filter>
   4.723 -    </ClInclude>
   4.724 -    <ClInclude Include="..\..\asn.1\*.h">
   4.725 -      <Filter>Header Files</Filter>
   4.726 -    </ClInclude>
   4.727 -    <ClInclude Include="..\..\asn.1\*.h">
   4.728 -      <Filter>Header Files</Filter>
   4.729 -    </ClInclude>
   4.730 -    <ClInclude Include="..\..\asn.1\*.h">
   4.731 -      <Filter>Header Files</Filter>
   4.732 -    </ClInclude>
   4.733 -    <ClInclude Include="..\..\asn.1\*.h">
   4.734 -      <Filter>Header Files</Filter>
   4.735 -    </ClInclude>
   4.736 -    <ClInclude Include="..\..\asn.1\*.h">
   4.737 -      <Filter>Header Files</Filter>
   4.738 -    </ClInclude>
   4.739 -    <ClInclude Include="..\..\asn.1\*.h">
   4.740 -      <Filter>Header Files</Filter>
   4.741 -    </ClInclude>
   4.742 -    <ClInclude Include="..\..\asn.1\*.h">
   4.743 -      <Filter>Header Files</Filter>
   4.744 -    </ClInclude>
   4.745 -    <ClInclude Include="..\..\asn.1\*.h">
   4.746 -      <Filter>Header Files</Filter>
   4.747 -    </ClInclude>
   4.748 -    <ClInclude Include="..\..\asn.1\*.h">
   4.749 -      <Filter>Header Files</Filter>
   4.750 -    </ClInclude>
   4.751 -    <ClInclude Include="..\..\asn.1\*.h">
   4.752 -      <Filter>Header Files</Filter>
   4.753 -    </ClInclude>
   4.754 -    <ClInclude Include="..\..\asn.1\*.h">
   4.755 -      <Filter>Header Files</Filter>
   4.756 -    </ClInclude>
   4.757 -    <ClInclude Include="..\..\asn.1\*.h">
   4.758 -      <Filter>Header Files</Filter>
   4.759 -    </ClInclude>
   4.760 -    <ClInclude Include="..\..\asn.1\*.h">
   4.761 -      <Filter>Header Files</Filter>
   4.762 -    </ClInclude>
   4.763 -    <ClInclude Include="..\..\asn.1\*.h">
   4.764 -      <Filter>Header Files</Filter>
   4.765 -    </ClInclude>
   4.766 -    <ClInclude Include="..\..\asn.1\*.h">
   4.767 -      <Filter>Header Files</Filter>
   4.768 -    </ClInclude>
   4.769 -    <ClInclude Include="..\..\asn.1\*.h">
   4.770 -      <Filter>Header Files</Filter>
   4.771 -    </ClInclude>
   4.772 -    <ClInclude Include="..\..\asn.1\*.h">
   4.773 -      <Filter>Header Files</Filter>
   4.774 -    </ClInclude>
   4.775 -    <ClInclude Include="..\..\asn.1\*.h">
   4.776 -      <Filter>Header Files</Filter>
   4.777 -    </ClInclude>
   4.778 -    <ClInclude Include="..\..\asn.1\*.h">
   4.779 -      <Filter>Header Files</Filter>
   4.780 -    </ClInclude>
   4.781 -    <ClInclude Include="..\..\asn.1\*.h">
   4.782 -      <Filter>Header Files</Filter>
   4.783 -    </ClInclude>
   4.784 -    <ClInclude Include="..\..\asn.1\*.h">
   4.785 -      <Filter>Header Files</Filter>
   4.786 -    </ClInclude>
   4.787 -    <ClInclude Include="..\..\asn.1\*.h">
   4.788 -      <Filter>Header Files</Filter>
   4.789 -    </ClInclude>
   4.790 -    <ClInclude Include="..\..\asn.1\*.h">
   4.791 -      <Filter>Header Files</Filter>
   4.792 -    </ClInclude>
   4.793 -    <ClInclude Include="..\..\asn.1\*.h">
   4.794 -      <Filter>Header Files</Filter>
   4.795 -    </ClInclude>
   4.796 -    <ClInclude Include="..\..\asn.1\*.h">
   4.797 -      <Filter>Header Files</Filter>
   4.798 -    </ClInclude>
   4.799 -    <ClInclude Include="..\..\asn.1\*.h">
   4.800 -      <Filter>Header Files</Filter>
   4.801 -    </ClInclude>
   4.802 -    <ClInclude Include="..\..\asn.1\*.h">
   4.803 -      <Filter>Header Files</Filter>
   4.804 -    </ClInclude>
   4.805 -    <ClInclude Include="..\..\asn.1\*.h">
   4.806 -      <Filter>Header Files</Filter>
   4.807 -    </ClInclude>
   4.808 -    <ClInclude Include="..\..\asn.1\*.h">
   4.809 -      <Filter>Header Files</Filter>
   4.810 -    </ClInclude>
   4.811 -    <ClInclude Include="..\..\asn.1\*.h">
   4.812 -      <Filter>Header Files</Filter>
   4.813 -    </ClInclude>
   4.814 -    <ClInclude Include="..\..\asn.1\*.h">
   4.815 -      <Filter>Header Files</Filter>
   4.816 -    </ClInclude>
   4.817 -    <ClInclude Include="..\..\asn.1\*.h">
   4.818 -      <Filter>Header Files</Filter>
   4.819 -    </ClInclude>
   4.820 -    <ClInclude Include="..\..\asn.1\*.h">
   4.821 -      <Filter>Header Files</Filter>
   4.822 -    </ClInclude>
   4.823 -    <ClInclude Include="..\..\asn.1\*.h">
   4.824 -      <Filter>Header Files</Filter>
   4.825 -    </ClInclude>
   4.826 -    <ClInclude Include="..\..\asn.1\*.h">
   4.827 -      <Filter>Header Files</Filter>
   4.828 -    </ClInclude>
   4.829 -    <ClInclude Include="..\..\asn.1\*.h">
   4.830 -      <Filter>Header Files</Filter>
   4.831 -    </ClInclude>
   4.832 -    <ClInclude Include="..\..\asn.1\*.h">
   4.833 -      <Filter>Header Files</Filter>
   4.834 -    </ClInclude>
   4.835 -    <ClInclude Include="..\..\asn.1\*.h">
   4.836 -      <Filter>Header Files</Filter>
   4.837 -    </ClInclude>
   4.838 -    <ClInclude Include="..\..\asn.1\*.h">
   4.839 -      <Filter>Header Files</Filter>
   4.840 -    </ClInclude>
   4.841 -    <ClInclude Include="..\..\asn.1\*.h">
   4.842 -      <Filter>Header Files</Filter>
   4.843 -    </ClInclude>
   4.844 -    <ClInclude Include="..\..\asn.1\*.h">
   4.845 -      <Filter>Header Files</Filter>
   4.846 -    </ClInclude>
   4.847 -    <ClInclude Include="..\..\asn.1\*.h">
   4.848 -      <Filter>Header Files</Filter>
   4.849 -    </ClInclude>
   4.850 -    <ClInclude Include="..\..\asn.1\*.h">
   4.851 -      <Filter>Header Files</Filter>
   4.852 -    </ClInclude>
   4.853 -    <ClInclude Include="..\..\asn.1\*.h">
   4.854 -      <Filter>Header Files</Filter>
   4.855 -    </ClInclude>
   4.856 -    <ClInclude Include="..\..\asn.1\*.h">
   4.857 -      <Filter>Header Files</Filter>
   4.858 -    </ClInclude>
   4.859 -    <ClInclude Include="..\..\asn.1\*.h">
   4.860 -      <Filter>Header Files</Filter>
   4.861 -    </ClInclude>
   4.862 -    <ClInclude Include="..\..\asn.1\*.h">
   4.863 -      <Filter>Header Files</Filter>
   4.864 -    </ClInclude>
   4.865 -    <ClInclude Include="..\..\asn.1\*.h">
   4.866 -      <Filter>Header Files</Filter>
   4.867 -    </ClInclude>
   4.868 -    <ClInclude Include="..\..\asn.1\*.h">
   4.869 -      <Filter>Header Files</Filter>
   4.870 -    </ClInclude>
   4.871 -    <ClInclude Include="..\..\asn.1\*.h">
   4.872 -      <Filter>Header Files</Filter>
   4.873 -    </ClInclude>
   4.874 -    <ClInclude Include="..\..\asn.1\*.h">
   4.875 -      <Filter>Header Files</Filter>
   4.876 -    </ClInclude>
   4.877 +    <None Include="..\generate_code.cmd" />
   4.878    </ItemGroup>
   4.879    <ItemGroup>
   4.880 -    <ClCompile Include="..\..\asn.1\*.c">
   4.881 +    <ClCompile Include="..\..\asn.1\asn_codecs_prim.c">
   4.882        <Filter>Source Files</Filter>
   4.883      </ClCompile>
   4.884 -    <ClCompile Include="..\..\asn.1\*.c">
   4.885 +    <ClCompile Include="..\..\asn.1\asn_SEQUENCE_OF.c">
   4.886        <Filter>Source Files</Filter>
   4.887      </ClCompile>
   4.888 -    <ClCompile Include="..\..\asn.1\*.c">
   4.889 +    <ClCompile Include="..\..\asn.1\asn_SET_OF.c">
   4.890        <Filter>Source Files</Filter>
   4.891      </ClCompile>
   4.892 -    <ClCompile Include="..\..\asn.1\*.c">
   4.893 +    <ClCompile Include="..\..\asn.1\Beacon.c">
   4.894        <Filter>Source Files</Filter>
   4.895      </ClCompile>
   4.896 -    <ClCompile Include="..\..\asn.1\*.c">
   4.897 +    <ClCompile Include="..\..\asn.1\ber_decoder.c">
   4.898        <Filter>Source Files</Filter>
   4.899      </ClCompile>
   4.900 -    <ClCompile Include="..\..\asn.1\*.c">
   4.901 +    <ClCompile Include="..\..\asn.1\ber_tlv_length.c">
   4.902        <Filter>Source Files</Filter>
   4.903      </ClCompile>
   4.904 -    <ClCompile Include="..\..\asn.1\*.c">
   4.905 +    <ClCompile Include="..\..\asn.1\ber_tlv_tag.c">
   4.906        <Filter>Source Files</Filter>
   4.907      </ClCompile>
   4.908 -    <ClCompile Include="..\..\asn.1\*.c">
   4.909 +    <ClCompile Include="..\..\asn.1\BIT_STRING.c">
   4.910        <Filter>Source Files</Filter>
   4.911      </ClCompile>
   4.912 -    <ClCompile Include="..\..\asn.1\*.c">
   4.913 +    <ClCompile Include="..\..\asn.1\BOOLEAN.c">
   4.914        <Filter>Source Files</Filter>
   4.915      </ClCompile>
   4.916 -    <ClCompile Include="..\..\asn.1\*.c">
   4.917 +    <ClCompile Include="..\..\asn.1\Command.c">
   4.918        <Filter>Source Files</Filter>
   4.919      </ClCompile>
   4.920 -    <ClCompile Include="..\..\asn.1\*.c">
   4.921 +    <ClCompile Include="..\..\asn.1\Commands.c">
   4.922        <Filter>Source Files</Filter>
   4.923      </ClCompile>
   4.924 -    <ClCompile Include="..\..\asn.1\*.c">
   4.925 +    <ClCompile Include="..\..\asn.1\CommitAccept.c">
   4.926        <Filter>Source Files</Filter>
   4.927      </ClCompile>
   4.928 -    <ClCompile Include="..\..\asn.1\*.c">
   4.929 +    <ClCompile Include="..\..\asn.1\CommitAcceptForGroup.c">
   4.930        <Filter>Source Files</Filter>
   4.931      </ClCompile>
   4.932 -    <ClCompile Include="..\..\asn.1\*.c">
   4.933 +    <ClCompile Include="..\..\asn.1\CommitAcceptOfferer.c">
   4.934        <Filter>Source Files</Filter>
   4.935      </ClCompile>
   4.936 -    <ClCompile Include="..\..\asn.1\*.c">
   4.937 +    <ClCompile Include="..\..\asn.1\CommitAcceptRequester.c">
   4.938        <Filter>Source Files</Filter>
   4.939      </ClCompile>
   4.940 -    <ClCompile Include="..\..\asn.1\*.c">
   4.941 +    <ClCompile Include="..\..\asn.1\CommitReject.c">
   4.942        <Filter>Source Files</Filter>
   4.943      </ClCompile>
   4.944 -    <ClCompile Include="..\..\asn.1\*.c">
   4.945 +    <ClCompile Include="..\..\asn.1\constraints.c">
   4.946        <Filter>Source Files</Filter>
   4.947      </ClCompile>
   4.948 -    <ClCompile Include="..\..\asn.1\*.c">
   4.949 +    <ClCompile Include="..\..\asn.1\constr_CHOICE.c">
   4.950        <Filter>Source Files</Filter>
   4.951      </ClCompile>
   4.952 -    <ClCompile Include="..\..\asn.1\*.c">
   4.953 +    <ClCompile Include="..\..\asn.1\constr_SEQUENCE.c">
   4.954        <Filter>Source Files</Filter>
   4.955      </ClCompile>
   4.956 -    <ClCompile Include="..\..\asn.1\*.c">
   4.957 +    <ClCompile Include="..\..\asn.1\constr_SEQUENCE_OF.c">
   4.958        <Filter>Source Files</Filter>
   4.959      </ClCompile>
   4.960 -    <ClCompile Include="..\..\asn.1\*.c">
   4.961 +    <ClCompile Include="..\..\asn.1\constr_SET_OF.c">
   4.962        <Filter>Source Files</Filter>
   4.963      </ClCompile>
   4.964 -    <ClCompile Include="..\..\asn.1\*.c">
   4.965 +    <ClCompile Include="..\..\asn.1\constr_TYPE.c">
   4.966        <Filter>Source Files</Filter>
   4.967      </ClCompile>
   4.968 -    <ClCompile Include="..\..\asn.1\*.c">
   4.969 +    <ClCompile Include="..\..\asn.1\der_encoder.c">
   4.970        <Filter>Source Files</Filter>
   4.971      </ClCompile>
   4.972 -    <ClCompile Include="..\..\asn.1\*.c">
   4.973 +    <ClCompile Include="..\..\asn.1\Distribution.c">
   4.974        <Filter>Source Files</Filter>
   4.975      </ClCompile>
   4.976 -    <ClCompile Include="..\..\asn.1\*.c">
   4.977 +    <ClCompile Include="..\..\asn.1\ElectGroupKeyResetLeader.c">
   4.978        <Filter>Source Files</Filter>
   4.979      </ClCompile>
   4.980 -    <ClCompile Include="..\..\asn.1\*.c">
   4.981 +    <ClCompile Include="..\..\asn.1\GroupHandshake.c">
   4.982        <Filter>Source Files</Filter>
   4.983      </ClCompile>
   4.984 -    <ClCompile Include="..\..\asn.1\*.c">
   4.985 +    <ClCompile Include="..\..\asn.1\GroupKeysAndClose.c">
   4.986        <Filter>Source Files</Filter>
   4.987      </ClCompile>
   4.988 -    <ClCompile Include="..\..\asn.1\*.c">
   4.989 +    <ClCompile Include="..\..\asn.1\GroupKeysForNewMember.c">
   4.990        <Filter>Source Files</Filter>
   4.991      </ClCompile>
   4.992 -    <ClCompile Include="..\..\asn.1\*.c">
   4.993 +    <ClCompile Include="..\..\asn.1\GroupKeysUpdate.c">
   4.994        <Filter>Source Files</Filter>
   4.995      </ClCompile>
   4.996 -    <ClCompile Include="..\..\asn.1\*.c">
   4.997 +    <ClCompile Include="..\..\asn.1\GroupTrustThisKey.c">
   4.998        <Filter>Source Files</Filter>
   4.999      </ClCompile>
  4.1000 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1001 +    <ClCompile Include="..\..\asn.1\Hash.c">
  4.1002        <Filter>Source Files</Filter>
  4.1003      </ClCompile>
  4.1004 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1005 +    <ClCompile Include="..\..\asn.1\Hex.c">
  4.1006        <Filter>Source Files</Filter>
  4.1007      </ClCompile>
  4.1008 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1009 +    <ClCompile Include="..\..\asn.1\Identity.c">
  4.1010        <Filter>Source Files</Filter>
  4.1011      </ClCompile>
  4.1012 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1013 +    <ClCompile Include="..\..\asn.1\IdentityList.c">
  4.1014        <Filter>Source Files</Filter>
  4.1015      </ClCompile>
  4.1016 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1017 +    <ClCompile Include="..\..\asn.1\InitUnledGroupKeyReset.c">
  4.1018        <Filter>Source Files</Filter>
  4.1019      </ClCompile>
  4.1020 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1021 +    <ClCompile Include="..\..\asn.1\INTEGER.c">
  4.1022        <Filter>Source Files</Filter>
  4.1023      </ClCompile>
  4.1024 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1025 +    <ClCompile Include="..\..\asn.1\ISO639-1.c">
  4.1026        <Filter>Source Files</Filter>
  4.1027      </ClCompile>
  4.1028 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1029 +    <ClCompile Include="..\..\asn.1\KeyReset.c">
  4.1030        <Filter>Source Files</Filter>
  4.1031      </ClCompile>
  4.1032 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1033 +    <ClCompile Include="..\..\asn.1\KeySync.c">
  4.1034        <Filter>Source Files</Filter>
  4.1035      </ClCompile>
  4.1036 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1037 +    <ClCompile Include="..\..\asn.1\NativeEnumerated.c">
  4.1038        <Filter>Source Files</Filter>
  4.1039      </ClCompile>
  4.1040 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1041 +    <ClCompile Include="..\..\asn.1\NativeInteger.c">
  4.1042        <Filter>Source Files</Filter>
  4.1043      </ClCompile>
  4.1044 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1045 +    <ClCompile Include="..\..\asn.1\NegotiationOpen.c">
  4.1046        <Filter>Source Files</Filter>
  4.1047      </ClCompile>
  4.1048 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1049 +    <ClCompile Include="..\..\asn.1\NegotiationRequest.c">
  4.1050        <Filter>Source Files</Filter>
  4.1051      </ClCompile>
  4.1052 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1053 +    <ClCompile Include="..\..\asn.1\NegotiationRequestGrouped.c">
  4.1054        <Filter>Source Files</Filter>
  4.1055      </ClCompile>
  4.1056 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1057 +    <ClCompile Include="..\..\asn.1\OCTET_STRING.c">
  4.1058        <Filter>Source Files</Filter>
  4.1059      </ClCompile>
  4.1060 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1061 +    <ClCompile Include="..\..\asn.1\OwnKeysOfferer.c">
  4.1062        <Filter>Source Files</Filter>
  4.1063      </ClCompile>
  4.1064 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1065 +    <ClCompile Include="..\..\asn.1\OwnKeysRequester.c">
  4.1066        <Filter>Source Files</Filter>
  4.1067      </ClCompile>
  4.1068 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1069 +    <ClCompile Include="..\..\asn.1\pdu_collection.c">
  4.1070        <Filter>Source Files</Filter>
  4.1071      </ClCompile>
  4.1072 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1073 +    <ClCompile Include="..\..\asn.1\per_decoder.c">
  4.1074        <Filter>Source Files</Filter>
  4.1075      </ClCompile>
  4.1076 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1077 +    <ClCompile Include="..\..\asn.1\per_encoder.c">
  4.1078        <Filter>Source Files</Filter>
  4.1079      </ClCompile>
  4.1080 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1081 +    <ClCompile Include="..\..\asn.1\per_opentype.c">
  4.1082        <Filter>Source Files</Filter>
  4.1083      </ClCompile>
  4.1084 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1085 +    <ClCompile Include="..\..\asn.1\per_support.c">
  4.1086        <Filter>Source Files</Filter>
  4.1087      </ClCompile>
  4.1088 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1089 +    <ClCompile Include="..\..\asn.1\PrintableString.c">
  4.1090        <Filter>Source Files</Filter>
  4.1091      </ClCompile>
  4.1092 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1093 +    <ClCompile Include="..\..\asn.1\PString.c">
  4.1094        <Filter>Source Files</Filter>
  4.1095      </ClCompile>
  4.1096 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1097 +    <ClCompile Include="..\..\asn.1\Rollback.c">
  4.1098        <Filter>Source Files</Filter>
  4.1099      </ClCompile>
  4.1100 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1101 +    <ClCompile Include="..\..\asn.1\Sync.c">
  4.1102        <Filter>Source Files</Filter>
  4.1103      </ClCompile>
  4.1104 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1105 +    <ClCompile Include="..\..\asn.1\SynchronizeGroupKeys.c">
  4.1106        <Filter>Source Files</Filter>
  4.1107      </ClCompile>
  4.1108 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1109 +    <ClCompile Include="..\..\asn.1\TID.c">
  4.1110        <Filter>Source Files</Filter>
  4.1111      </ClCompile>
  4.1112 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1113 +    <ClCompile Include="..\..\asn.1\UTF8String.c">
  4.1114        <Filter>Source Files</Filter>
  4.1115      </ClCompile>
  4.1116 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1117 +    <ClCompile Include="..\..\asn.1\Version.c">
  4.1118        <Filter>Source Files</Filter>
  4.1119      </ClCompile>
  4.1120 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1121 +    <ClCompile Include="..\..\asn.1\xer_decoder.c">
  4.1122        <Filter>Source Files</Filter>
  4.1123      </ClCompile>
  4.1124 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1125 +    <ClCompile Include="..\..\asn.1\xer_encoder.c">
  4.1126        <Filter>Source Files</Filter>
  4.1127      </ClCompile>
  4.1128 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1129 -      <Filter>Source Files</Filter>
  4.1130 -    </ClCompile>
  4.1131 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1132 -      <Filter>Source Files</Filter>
  4.1133 -    </ClCompile>
  4.1134 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1135 -      <Filter>Source Files</Filter>
  4.1136 -    </ClCompile>
  4.1137 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1138 -      <Filter>Source Files</Filter>
  4.1139 -    </ClCompile>
  4.1140 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1141 -      <Filter>Source Files</Filter>
  4.1142 -    </ClCompile>
  4.1143 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1144 -      <Filter>Source Files</Filter>
  4.1145 -    </ClCompile>
  4.1146 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1147 -      <Filter>Source Files</Filter>
  4.1148 -    </ClCompile>
  4.1149 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1150 -      <Filter>Source Files</Filter>
  4.1151 -    </ClCompile>
  4.1152 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1153 -      <Filter>Source Files</Filter>
  4.1154 -    </ClCompile>
  4.1155 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1156 -      <Filter>Source Files</Filter>
  4.1157 -    </ClCompile>
  4.1158 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1159 -      <Filter>Source Files</Filter>
  4.1160 -    </ClCompile>
  4.1161 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1162 -      <Filter>Source Files</Filter>
  4.1163 -    </ClCompile>
  4.1164 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1165 -      <Filter>Source Files</Filter>
  4.1166 -    </ClCompile>
  4.1167 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1168 -      <Filter>Source Files</Filter>
  4.1169 -    </ClCompile>
  4.1170 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1171 -      <Filter>Source Files</Filter>
  4.1172 -    </ClCompile>
  4.1173 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1174 -      <Filter>Source Files</Filter>
  4.1175 -    </ClCompile>
  4.1176 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1177 -      <Filter>Source Files</Filter>
  4.1178 -    </ClCompile>
  4.1179 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1180 -      <Filter>Source Files</Filter>
  4.1181 -    </ClCompile>
  4.1182 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1183 -      <Filter>Source Files</Filter>
  4.1184 -    </ClCompile>
  4.1185 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1186 -      <Filter>Source Files</Filter>
  4.1187 -    </ClCompile>
  4.1188 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1189 -      <Filter>Source Files</Filter>
  4.1190 -    </ClCompile>
  4.1191 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1192 -      <Filter>Source Files</Filter>
  4.1193 -    </ClCompile>
  4.1194 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1195 -      <Filter>Source Files</Filter>
  4.1196 -    </ClCompile>
  4.1197 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1198 -      <Filter>Source Files</Filter>
  4.1199 -    </ClCompile>
  4.1200 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1201 -      <Filter>Source Files</Filter>
  4.1202 -    </ClCompile>
  4.1203 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1204 -      <Filter>Source Files</Filter>
  4.1205 -    </ClCompile>
  4.1206 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1207 -      <Filter>Source Files</Filter>
  4.1208 -    </ClCompile>
  4.1209 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1210 -      <Filter>Source Files</Filter>
  4.1211 -    </ClCompile>
  4.1212 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1213 -      <Filter>Source Files</Filter>
  4.1214 -    </ClCompile>
  4.1215 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1216 -      <Filter>Source Files</Filter>
  4.1217 -    </ClCompile>
  4.1218 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1219 -      <Filter>Source Files</Filter>
  4.1220 -    </ClCompile>
  4.1221 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1222 -      <Filter>Source Files</Filter>
  4.1223 -    </ClCompile>
  4.1224 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1225 -      <Filter>Source Files</Filter>
  4.1226 -    </ClCompile>
  4.1227 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1228 -      <Filter>Source Files</Filter>
  4.1229 -    </ClCompile>
  4.1230 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1231 -      <Filter>Source Files</Filter>
  4.1232 -    </ClCompile>
  4.1233 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1234 -      <Filter>Source Files</Filter>
  4.1235 -    </ClCompile>
  4.1236 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1237 -      <Filter>Source Files</Filter>
  4.1238 -    </ClCompile>
  4.1239 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1240 -      <Filter>Source Files</Filter>
  4.1241 -    </ClCompile>
  4.1242 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1243 -      <Filter>Source Files</Filter>
  4.1244 -    </ClCompile>
  4.1245 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1246 -      <Filter>Source Files</Filter>
  4.1247 -    </ClCompile>
  4.1248 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1249 -      <Filter>Source Files</Filter>
  4.1250 -    </ClCompile>
  4.1251 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1252 -      <Filter>Source Files</Filter>
  4.1253 -    </ClCompile>
  4.1254 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1255 -      <Filter>Source Files</Filter>
  4.1256 -    </ClCompile>
  4.1257 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1258 -      <Filter>Source Files</Filter>
  4.1259 -    </ClCompile>
  4.1260 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1261 -      <Filter>Source Files</Filter>
  4.1262 -    </ClCompile>
  4.1263 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1264 -      <Filter>Source Files</Filter>
  4.1265 -    </ClCompile>
  4.1266 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1267 -      <Filter>Source Files</Filter>
  4.1268 -    </ClCompile>
  4.1269 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1270 -      <Filter>Source Files</Filter>
  4.1271 -    </ClCompile>
  4.1272 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1273 -      <Filter>Source Files</Filter>
  4.1274 -    </ClCompile>
  4.1275 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1276 -      <Filter>Source Files</Filter>
  4.1277 -    </ClCompile>
  4.1278 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1279 -      <Filter>Source Files</Filter>
  4.1280 -    </ClCompile>
  4.1281 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1282 -      <Filter>Source Files</Filter>
  4.1283 -    </ClCompile>
  4.1284 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1285 -      <Filter>Source Files</Filter>
  4.1286 -    </ClCompile>
  4.1287 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1288 -      <Filter>Source Files</Filter>
  4.1289 -    </ClCompile>
  4.1290 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1291 -      <Filter>Source Files</Filter>
  4.1292 -    </ClCompile>
  4.1293 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1294 -      <Filter>Source Files</Filter>
  4.1295 -    </ClCompile>
  4.1296 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1297 -      <Filter>Source Files</Filter>
  4.1298 -    </ClCompile>
  4.1299 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1300 -      <Filter>Source Files</Filter>
  4.1301 -    </ClCompile>
  4.1302 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1303 -      <Filter>Source Files</Filter>
  4.1304 -    </ClCompile>
  4.1305 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1306 -      <Filter>Source Files</Filter>
  4.1307 -    </ClCompile>
  4.1308 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1309 -      <Filter>Source Files</Filter>
  4.1310 -    </ClCompile>
  4.1311 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1312 -      <Filter>Source Files</Filter>
  4.1313 -    </ClCompile>
  4.1314 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1315 -      <Filter>Source Files</Filter>
  4.1316 -    </ClCompile>
  4.1317 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1318 -      <Filter>Source Files</Filter>
  4.1319 -    </ClCompile>
  4.1320 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1321 -      <Filter>Source Files</Filter>
  4.1322 -    </ClCompile>
  4.1323 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1324 -      <Filter>Source Files</Filter>
  4.1325 -    </ClCompile>
  4.1326 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1327 -      <Filter>Source Files</Filter>
  4.1328 -    </ClCompile>
  4.1329 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1330 -      <Filter>Source Files</Filter>
  4.1331 -    </ClCompile>
  4.1332 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1333 -      <Filter>Source Files</Filter>
  4.1334 -    </ClCompile>
  4.1335 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1336 -      <Filter>Source Files</Filter>
  4.1337 -    </ClCompile>
  4.1338 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1339 -      <Filter>Source Files</Filter>
  4.1340 -    </ClCompile>
  4.1341 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1342 -      <Filter>Source Files</Filter>
  4.1343 -    </ClCompile>
  4.1344 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1345 -      <Filter>Source Files</Filter>
  4.1346 -    </ClCompile>
  4.1347 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1348 -      <Filter>Source Files</Filter>
  4.1349 -    </ClCompile>
  4.1350 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1351 -      <Filter>Source Files</Filter>
  4.1352 -    </ClCompile>
  4.1353 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1354 -      <Filter>Source Files</Filter>
  4.1355 -    </ClCompile>
  4.1356 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1357 -      <Filter>Source Files</Filter>
  4.1358 -    </ClCompile>
  4.1359 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1360 -      <Filter>Source Files</Filter>
  4.1361 -    </ClCompile>
  4.1362 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1363 -      <Filter>Source Files</Filter>
  4.1364 -    </ClCompile>
  4.1365 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1366 -      <Filter>Source Files</Filter>
  4.1367 -    </ClCompile>
  4.1368 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1369 -      <Filter>Source Files</Filter>
  4.1370 -    </ClCompile>
  4.1371 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1372 -      <Filter>Source Files</Filter>
  4.1373 -    </ClCompile>
  4.1374 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1375 -      <Filter>Source Files</Filter>
  4.1376 -    </ClCompile>
  4.1377 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1378 -      <Filter>Source Files</Filter>
  4.1379 -    </ClCompile>
  4.1380 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1381 -      <Filter>Source Files</Filter>
  4.1382 -    </ClCompile>
  4.1383 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1384 -      <Filter>Source Files</Filter>
  4.1385 -    </ClCompile>
  4.1386 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1387 -      <Filter>Source Files</Filter>
  4.1388 -    </ClCompile>
  4.1389 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1390 -      <Filter>Source Files</Filter>
  4.1391 -    </ClCompile>
  4.1392 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1393 -      <Filter>Source Files</Filter>
  4.1394 -    </ClCompile>
  4.1395 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1396 -      <Filter>Source Files</Filter>
  4.1397 -    </ClCompile>
  4.1398 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1399 -      <Filter>Source Files</Filter>
  4.1400 -    </ClCompile>
  4.1401 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1402 -      <Filter>Source Files</Filter>
  4.1403 -    </ClCompile>
  4.1404 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1405 -      <Filter>Source Files</Filter>
  4.1406 -    </ClCompile>
  4.1407 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1408 -      <Filter>Source Files</Filter>
  4.1409 -    </ClCompile>
  4.1410 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1411 -      <Filter>Source Files</Filter>
  4.1412 -    </ClCompile>
  4.1413 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1414 -      <Filter>Source Files</Filter>
  4.1415 -    </ClCompile>
  4.1416 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1417 -      <Filter>Source Files</Filter>
  4.1418 -    </ClCompile>
  4.1419 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1420 -      <Filter>Source Files</Filter>
  4.1421 -    </ClCompile>
  4.1422 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1423 -      <Filter>Source Files</Filter>
  4.1424 -    </ClCompile>
  4.1425 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1426 -      <Filter>Source Files</Filter>
  4.1427 -    </ClCompile>
  4.1428 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1429 -      <Filter>Source Files</Filter>
  4.1430 -    </ClCompile>
  4.1431 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1432 -      <Filter>Source Files</Filter>
  4.1433 -    </ClCompile>
  4.1434 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1435 -      <Filter>Source Files</Filter>
  4.1436 -    </ClCompile>
  4.1437 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1438 -      <Filter>Source Files</Filter>
  4.1439 -    </ClCompile>
  4.1440 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1441 -      <Filter>Source Files</Filter>
  4.1442 -    </ClCompile>
  4.1443 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1444 -      <Filter>Source Files</Filter>
  4.1445 -    </ClCompile>
  4.1446 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1447 -      <Filter>Source Files</Filter>
  4.1448 -    </ClCompile>
  4.1449 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1450 -      <Filter>Source Files</Filter>
  4.1451 -    </ClCompile>
  4.1452 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1453 -      <Filter>Source Files</Filter>
  4.1454 -    </ClCompile>
  4.1455 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1456 -      <Filter>Source Files</Filter>
  4.1457 -    </ClCompile>
  4.1458 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1459 -      <Filter>Source Files</Filter>
  4.1460 -    </ClCompile>
  4.1461 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1462 -      <Filter>Source Files</Filter>
  4.1463 -    </ClCompile>
  4.1464 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1465 -      <Filter>Source Files</Filter>
  4.1466 -    </ClCompile>
  4.1467 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1468 -      <Filter>Source Files</Filter>
  4.1469 -    </ClCompile>
  4.1470 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1471 -      <Filter>Source Files</Filter>
  4.1472 -    </ClCompile>
  4.1473 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1474 -      <Filter>Source Files</Filter>
  4.1475 -    </ClCompile>
  4.1476 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1477 -      <Filter>Source Files</Filter>
  4.1478 -    </ClCompile>
  4.1479 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1480 -      <Filter>Source Files</Filter>
  4.1481 -    </ClCompile>
  4.1482 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1483 -      <Filter>Source Files</Filter>
  4.1484 -    </ClCompile>
  4.1485 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1486 -      <Filter>Source Files</Filter>
  4.1487 -    </ClCompile>
  4.1488 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1489 -      <Filter>Source Files</Filter>
  4.1490 -    </ClCompile>
  4.1491 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1492 -      <Filter>Source Files</Filter>
  4.1493 -    </ClCompile>
  4.1494 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1495 -      <Filter>Source Files</Filter>
  4.1496 -    </ClCompile>
  4.1497 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1498 -      <Filter>Source Files</Filter>
  4.1499 -    </ClCompile>
  4.1500 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1501 -      <Filter>Source Files</Filter>
  4.1502 -    </ClCompile>
  4.1503 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1504 -      <Filter>Source Files</Filter>
  4.1505 -    </ClCompile>
  4.1506 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1507 -      <Filter>Source Files</Filter>
  4.1508 -    </ClCompile>
  4.1509 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1510 -      <Filter>Source Files</Filter>
  4.1511 -    </ClCompile>
  4.1512 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1513 -      <Filter>Source Files</Filter>
  4.1514 -    </ClCompile>
  4.1515 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1516 -      <Filter>Source Files</Filter>
  4.1517 -    </ClCompile>
  4.1518 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1519 -      <Filter>Source Files</Filter>
  4.1520 -    </ClCompile>
  4.1521 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1522 -      <Filter>Source Files</Filter>
  4.1523 -    </ClCompile>
  4.1524 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1525 -      <Filter>Source Files</Filter>
  4.1526 -    </ClCompile>
  4.1527 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1528 -      <Filter>Source Files</Filter>
  4.1529 -    </ClCompile>
  4.1530 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1531 -      <Filter>Source Files</Filter>
  4.1532 -    </ClCompile>
  4.1533 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1534 -      <Filter>Source Files</Filter>
  4.1535 -    </ClCompile>
  4.1536 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1537 -      <Filter>Source Files</Filter>
  4.1538 -    </ClCompile>
  4.1539 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1540 -      <Filter>Source Files</Filter>
  4.1541 -    </ClCompile>
  4.1542 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1543 -      <Filter>Source Files</Filter>
  4.1544 -    </ClCompile>
  4.1545 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1546 -      <Filter>Source Files</Filter>
  4.1547 -    </ClCompile>
  4.1548 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1549 -      <Filter>Source Files</Filter>
  4.1550 -    </ClCompile>
  4.1551 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1552 -      <Filter>Source Files</Filter>
  4.1553 -    </ClCompile>
  4.1554 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1555 -      <Filter>Source Files</Filter>
  4.1556 -    </ClCompile>
  4.1557 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1558 -      <Filter>Source Files</Filter>
  4.1559 -    </ClCompile>
  4.1560 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1561 -      <Filter>Source Files</Filter>
  4.1562 -    </ClCompile>
  4.1563 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1564 -      <Filter>Source Files</Filter>
  4.1565 -    </ClCompile>
  4.1566 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1567 -      <Filter>Source Files</Filter>
  4.1568 -    </ClCompile>
  4.1569 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1570 -      <Filter>Source Files</Filter>
  4.1571 -    </ClCompile>
  4.1572 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1573 -      <Filter>Source Files</Filter>
  4.1574 -    </ClCompile>
  4.1575 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1576 -      <Filter>Source Files</Filter>
  4.1577 -    </ClCompile>
  4.1578 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1579 -      <Filter>Source Files</Filter>
  4.1580 -    </ClCompile>
  4.1581 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1582 -      <Filter>Source Files</Filter>
  4.1583 -    </ClCompile>
  4.1584 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1585 -      <Filter>Source Files</Filter>
  4.1586 -    </ClCompile>
  4.1587 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1588 -      <Filter>Source Files</Filter>
  4.1589 -    </ClCompile>
  4.1590 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1591 -      <Filter>Source Files</Filter>
  4.1592 -    </ClCompile>
  4.1593 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1594 -      <Filter>Source Files</Filter>
  4.1595 -    </ClCompile>
  4.1596 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1597 -      <Filter>Source Files</Filter>
  4.1598 -    </ClCompile>
  4.1599 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1600 -      <Filter>Source Files</Filter>
  4.1601 -    </ClCompile>
  4.1602 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1603 -      <Filter>Source Files</Filter>
  4.1604 -    </ClCompile>
  4.1605 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1606 -      <Filter>Source Files</Filter>
  4.1607 -    </ClCompile>
  4.1608 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1609 -      <Filter>Source Files</Filter>
  4.1610 -    </ClCompile>
  4.1611 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1612 -      <Filter>Source Files</Filter>
  4.1613 -    </ClCompile>
  4.1614 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1615 -      <Filter>Source Files</Filter>
  4.1616 -    </ClCompile>
  4.1617 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1618 -      <Filter>Source Files</Filter>
  4.1619 -    </ClCompile>
  4.1620 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1621 -      <Filter>Source Files</Filter>
  4.1622 -    </ClCompile>
  4.1623 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1624 -      <Filter>Source Files</Filter>
  4.1625 -    </ClCompile>
  4.1626 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1627 -      <Filter>Source Files</Filter>
  4.1628 -    </ClCompile>
  4.1629 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1630 -      <Filter>Source Files</Filter>
  4.1631 -    </ClCompile>
  4.1632 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1633 -      <Filter>Source Files</Filter>
  4.1634 -    </ClCompile>
  4.1635 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1636 -      <Filter>Source Files</Filter>
  4.1637 -    </ClCompile>
  4.1638 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1639 -      <Filter>Source Files</Filter>
  4.1640 -    </ClCompile>
  4.1641 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1642 -      <Filter>Source Files</Filter>
  4.1643 -    </ClCompile>
  4.1644 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1645 -      <Filter>Source Files</Filter>
  4.1646 -    </ClCompile>
  4.1647 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1648 -      <Filter>Source Files</Filter>
  4.1649 -    </ClCompile>
  4.1650 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1651 -      <Filter>Source Files</Filter>
  4.1652 -    </ClCompile>
  4.1653 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1654 -      <Filter>Source Files</Filter>
  4.1655 -    </ClCompile>
  4.1656 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1657 -      <Filter>Source Files</Filter>
  4.1658 -    </ClCompile>
  4.1659 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1660 -      <Filter>Source Files</Filter>
  4.1661 -    </ClCompile>
  4.1662 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1663 -      <Filter>Source Files</Filter>
  4.1664 -    </ClCompile>
  4.1665 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1666 -      <Filter>Source Files</Filter>
  4.1667 -    </ClCompile>
  4.1668 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1669 -      <Filter>Source Files</Filter>
  4.1670 -    </ClCompile>
  4.1671 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1672 -      <Filter>Source Files</Filter>
  4.1673 -    </ClCompile>
  4.1674 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1675 -      <Filter>Source Files</Filter>
  4.1676 -    </ClCompile>
  4.1677 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1678 -      <Filter>Source Files</Filter>
  4.1679 -    </ClCompile>
  4.1680 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1681 -      <Filter>Source Files</Filter>
  4.1682 -    </ClCompile>
  4.1683 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1684 -      <Filter>Source Files</Filter>
  4.1685 -    </ClCompile>
  4.1686 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1687 -      <Filter>Source Files</Filter>
  4.1688 -    </ClCompile>
  4.1689 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1690 -      <Filter>Source Files</Filter>
  4.1691 -    </ClCompile>
  4.1692 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1693 -      <Filter>Source Files</Filter>
  4.1694 -    </ClCompile>
  4.1695 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1696 -      <Filter>Source Files</Filter>
  4.1697 -    </ClCompile>
  4.1698 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1699 -      <Filter>Source Files</Filter>
  4.1700 -    </ClCompile>
  4.1701 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1702 -      <Filter>Source Files</Filter>
  4.1703 -    </ClCompile>
  4.1704 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1705 -      <Filter>Source Files</Filter>
  4.1706 -    </ClCompile>
  4.1707 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1708 -      <Filter>Source Files</Filter>
  4.1709 -    </ClCompile>
  4.1710 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1711 -      <Filter>Source Files</Filter>
  4.1712 -    </ClCompile>
  4.1713 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1714 -      <Filter>Source Files</Filter>
  4.1715 -    </ClCompile>
  4.1716 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1717 -      <Filter>Source Files</Filter>
  4.1718 -    </ClCompile>
  4.1719 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1720 -      <Filter>Source Files</Filter>
  4.1721 -    </ClCompile>
  4.1722 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1723 -      <Filter>Source Files</Filter>
  4.1724 -    </ClCompile>
  4.1725 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1726 -      <Filter>Source Files</Filter>
  4.1727 -    </ClCompile>
  4.1728 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1729 -      <Filter>Source Files</Filter>
  4.1730 -    </ClCompile>
  4.1731 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1732 -      <Filter>Source Files</Filter>
  4.1733 -    </ClCompile>
  4.1734 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1735 -      <Filter>Source Files</Filter>
  4.1736 -    </ClCompile>
  4.1737 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1738 -      <Filter>Source Files</Filter>
  4.1739 -    </ClCompile>
  4.1740 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1741 -      <Filter>Source Files</Filter>
  4.1742 -    </ClCompile>
  4.1743 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1744 -      <Filter>Source Files</Filter>
  4.1745 -    </ClCompile>
  4.1746 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1747 -      <Filter>Source Files</Filter>
  4.1748 -    </ClCompile>
  4.1749 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1750 -      <Filter>Source Files</Filter>
  4.1751 -    </ClCompile>
  4.1752 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1753 -      <Filter>Source Files</Filter>
  4.1754 -    </ClCompile>
  4.1755 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1756 -      <Filter>Source Files</Filter>
  4.1757 -    </ClCompile>
  4.1758 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1759 -      <Filter>Source Files</Filter>
  4.1760 -    </ClCompile>
  4.1761 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1762 -      <Filter>Source Files</Filter>
  4.1763 -    </ClCompile>
  4.1764 -    <ClCompile Include="..\..\asn.1\*.c">
  4.1765 +    <ClCompile Include="..\..\asn.1\xer_support.c">
  4.1766        <Filter>Source Files</Filter>
  4.1767      </ClCompile>
  4.1768    </ItemGroup>
  4.1769    <ItemGroup>
  4.1770 -    <None Include="..\generate_code.cmd" />
  4.1771 +    <ClInclude Include="..\..\asn.1\asn_application.h">
  4.1772 +      <Filter>Header Files</Filter>
  4.1773 +    </ClInclude>
  4.1774 +    <ClInclude Include="..\..\asn.1\asn_codecs.h">
  4.1775 +      <Filter>Header Files</Filter>
  4.1776 +    </ClInclude>
  4.1777 +    <ClInclude Include="..\..\asn.1\asn_codecs_prim.h">
  4.1778 +      <Filter>Header Files</Filter>
  4.1779 +    </ClInclude>
  4.1780 +    <ClInclude Include="..\..\asn.1\asn_internal.h">
  4.1781 +      <Filter>Header Files</Filter>
  4.1782 +    </ClInclude>
  4.1783 +    <ClInclude Include="..\..\asn.1\asn_SEQUENCE_OF.h">
  4.1784 +      <Filter>Header Files</Filter>
  4.1785 +    </ClInclude>
  4.1786 +    <ClInclude Include="..\..\asn.1\asn_SET_OF.h">
  4.1787 +      <Filter>Header Files</Filter>
  4.1788 +    </ClInclude>
  4.1789 +    <ClInclude Include="..\..\asn.1\asn_system.h">
  4.1790 +      <Filter>Header Files</Filter>
  4.1791 +    </ClInclude>
  4.1792 +    <ClInclude Include="..\..\asn.1\Beacon.h">
  4.1793 +      <Filter>Header Files</Filter>
  4.1794 +    </ClInclude>
  4.1795 +    <ClInclude Include="..\..\asn.1\ber_decoder.h">
  4.1796 +      <Filter>Header Files</Filter>
  4.1797 +    </ClInclude>
  4.1798 +    <ClInclude Include="..\..\asn.1\ber_tlv_length.h">
  4.1799 +      <Filter>Header Files</Filter>
  4.1800 +    </ClInclude>
  4.1801 +    <ClInclude Include="..\..\asn.1\ber_tlv_tag.h">
  4.1802 +      <Filter>Header Files</Filter>
  4.1803 +    </ClInclude>
  4.1804 +    <ClInclude Include="..\..\asn.1\BIT_STRING.h">
  4.1805 +      <Filter>Header Files</Filter>
  4.1806 +    </ClInclude>
  4.1807 +    <ClInclude Include="..\..\asn.1\BOOLEAN.h">
  4.1808 +      <Filter>Header Files</Filter>
  4.1809 +    </ClInclude>
  4.1810 +    <ClInclude Include="..\..\asn.1\Command.h">
  4.1811 +      <Filter>Header Files</Filter>
  4.1812 +    </ClInclude>
  4.1813 +    <ClInclude Include="..\..\asn.1\Commands.h">
  4.1814 +      <Filter>Header Files</Filter>
  4.1815 +    </ClInclude>
  4.1816 +    <ClInclude Include="..\..\asn.1\CommitAccept.h">
  4.1817 +      <Filter>Header Files</Filter>
  4.1818 +    </ClInclude>
  4.1819 +    <ClInclude Include="..\..\asn.1\CommitAcceptForGroup.h">
  4.1820 +      <Filter>Header Files</Filter>
  4.1821 +    </ClInclude>
  4.1822 +    <ClInclude Include="..\..\asn.1\CommitAcceptOfferer.h">
  4.1823 +      <Filter>Header Files</Filter>
  4.1824 +    </ClInclude>
  4.1825 +    <ClInclude Include="..\..\asn.1\CommitAcceptRequester.h">
  4.1826 +      <Filter>Header Files</Filter>
  4.1827 +    </ClInclude>
  4.1828 +    <ClInclude Include="..\..\asn.1\CommitReject.h">
  4.1829 +      <Filter>Header Files</Filter>
  4.1830 +    </ClInclude>
  4.1831 +    <ClInclude Include="..\..\asn.1\constraints.h">
  4.1832 +      <Filter>Header Files</Filter>
  4.1833 +    </ClInclude>
  4.1834 +    <ClInclude Include="..\..\asn.1\constr_CHOICE.h">
  4.1835 +      <Filter>Header Files</Filter>
  4.1836 +    </ClInclude>
  4.1837 +    <ClInclude Include="..\..\asn.1\constr_SEQUENCE.h">
  4.1838 +      <Filter>Header Files</Filter>
  4.1839 +    </ClInclude>
  4.1840 +    <ClInclude Include="..\..\asn.1\constr_SEQUENCE_OF.h">
  4.1841 +      <Filter>Header Files</Filter>
  4.1842 +    </ClInclude>
  4.1843 +    <ClInclude Include="..\..\asn.1\constr_SET_OF.h">
  4.1844 +      <Filter>Header Files</Filter>
  4.1845 +    </ClInclude>
  4.1846 +    <ClInclude Include="..\..\asn.1\constr_TYPE.h">
  4.1847 +      <Filter>Header Files</Filter>
  4.1848 +    </ClInclude>
  4.1849 +    <ClInclude Include="..\..\asn.1\der_encoder.h">
  4.1850 +      <Filter>Header Files</Filter>
  4.1851 +    </ClInclude>
  4.1852 +    <ClInclude Include="..\..\asn.1\Distribution.h">
  4.1853 +      <Filter>Header Files</Filter>
  4.1854 +    </ClInclude>
  4.1855 +    <ClInclude Include="..\..\asn.1\ElectGroupKeyResetLeader.h">
  4.1856 +      <Filter>Header Files</Filter>
  4.1857 +    </ClInclude>
  4.1858 +    <ClInclude Include="..\..\asn.1\GroupHandshake.h">
  4.1859 +      <Filter>Header Files</Filter>
  4.1860 +    </ClInclude>
  4.1861 +    <ClInclude Include="..\..\asn.1\GroupKeysAndClose.h">
  4.1862 +      <Filter>Header Files</Filter>
  4.1863 +    </ClInclude>
  4.1864 +    <ClInclude Include="..\..\asn.1\GroupKeysForNewMember.h">
  4.1865 +      <Filter>Header Files</Filter>
  4.1866 +    </ClInclude>
  4.1867 +    <ClInclude Include="..\..\asn.1\GroupKeysUpdate.h">
  4.1868 +      <Filter>Header Files</Filter>
  4.1869 +    </ClInclude>
  4.1870 +    <ClInclude Include="..\..\asn.1\GroupTrustThisKey.h">
  4.1871 +      <Filter>Header Files</Filter>
  4.1872 +    </ClInclude>
  4.1873 +    <ClInclude Include="..\..\asn.1\Hash.h">
  4.1874 +      <Filter>Header Files</Filter>
  4.1875 +    </ClInclude>
  4.1876 +    <ClInclude Include="..\..\asn.1\Hex.h">
  4.1877 +      <Filter>Header Files</Filter>
  4.1878 +    </ClInclude>
  4.1879 +    <ClInclude Include="..\..\asn.1\Identity.h">
  4.1880 +      <Filter>Header Files</Filter>
  4.1881 +    </ClInclude>
  4.1882 +    <ClInclude Include="..\..\asn.1\IdentityList.h">
  4.1883 +      <Filter>Header Files</Filter>
  4.1884 +    </ClInclude>
  4.1885 +    <ClInclude Include="..\..\asn.1\InitUnledGroupKeyReset.h">
  4.1886 +      <Filter>Header Files</Filter>
  4.1887 +    </ClInclude>
  4.1888 +    <ClInclude Include="..\..\asn.1\INTEGER.h">
  4.1889 +      <Filter>Header Files</Filter>
  4.1890 +    </ClInclude>
  4.1891 +    <ClInclude Include="..\..\asn.1\ISO639-1.h">
  4.1892 +      <Filter>Header Files</Filter>
  4.1893 +    </ClInclude>
  4.1894 +    <ClInclude Include="..\..\asn.1\KeyReset.h">
  4.1895 +      <Filter>Header Files</Filter>
  4.1896 +    </ClInclude>
  4.1897 +    <ClInclude Include="..\..\asn.1\KeySync.h">
  4.1898 +      <Filter>Header Files</Filter>
  4.1899 +    </ClInclude>
  4.1900 +    <ClInclude Include="..\..\asn.1\NativeEnumerated.h">
  4.1901 +      <Filter>Header Files</Filter>
  4.1902 +    </ClInclude>
  4.1903 +    <ClInclude Include="..\..\asn.1\NativeInteger.h">
  4.1904 +      <Filter>Header Files</Filter>
  4.1905 +    </ClInclude>
  4.1906 +    <ClInclude Include="..\..\asn.1\NegotiationOpen.h">
  4.1907 +      <Filter>Header Files</Filter>
  4.1908 +    </ClInclude>
  4.1909 +    <ClInclude Include="..\..\asn.1\NegotiationRequest.h">
  4.1910 +      <Filter>Header Files</Filter>
  4.1911 +    </ClInclude>
  4.1912 +    <ClInclude Include="..\..\asn.1\NegotiationRequestGrouped.h">
  4.1913 +      <Filter>Header Files</Filter>
  4.1914 +    </ClInclude>
  4.1915 +    <ClInclude Include="..\..\asn.1\OCTET_STRING.h">
  4.1916 +      <Filter>Header Files</Filter>
  4.1917 +    </ClInclude>
  4.1918 +    <ClInclude Include="..\..\asn.1\OwnKeysOfferer.h">
  4.1919 +      <Filter>Header Files</Filter>
  4.1920 +    </ClInclude>
  4.1921 +    <ClInclude Include="..\..\asn.1\OwnKeysRequester.h">
  4.1922 +      <Filter>Header Files</Filter>
  4.1923 +    </ClInclude>
  4.1924 +    <ClInclude Include="..\..\asn.1\per_decoder.h">
  4.1925 +      <Filter>Header Files</Filter>
  4.1926 +    </ClInclude>
  4.1927 +    <ClInclude Include="..\..\asn.1\per_encoder.h">
  4.1928 +      <Filter>Header Files</Filter>
  4.1929 +    </ClInclude>
  4.1930 +    <ClInclude Include="..\..\asn.1\per_opentype.h">
  4.1931 +      <Filter>Header Files</Filter>
  4.1932 +    </ClInclude>
  4.1933 +    <ClInclude Include="..\..\asn.1\per_support.h">
  4.1934 +      <Filter>Header Files</Filter>
  4.1935 +    </ClInclude>
  4.1936 +    <ClInclude Include="..\..\asn.1\PrintableString.h">
  4.1937 +      <Filter>Header Files</Filter>
  4.1938 +    </ClInclude>
  4.1939 +    <ClInclude Include="..\..\asn.1\PString.h">
  4.1940 +      <Filter>Header Files</Filter>
  4.1941 +    </ClInclude>
  4.1942 +    <ClInclude Include="..\..\asn.1\Rollback.h">
  4.1943 +      <Filter>Header Files</Filter>
  4.1944 +    </ClInclude>
  4.1945 +    <ClInclude Include="..\..\asn.1\Sync.h">
  4.1946 +      <Filter>Header Files</Filter>
  4.1947 +    </ClInclude>
  4.1948 +    <ClInclude Include="..\..\asn.1\SynchronizeGroupKeys.h">
  4.1949 +      <Filter>Header Files</Filter>
  4.1950 +    </ClInclude>
  4.1951 +    <ClInclude Include="..\..\asn.1\TID.h">
  4.1952 +      <Filter>Header Files</Filter>
  4.1953 +    </ClInclude>
  4.1954 +    <ClInclude Include="..\..\asn.1\UTF8String.h">
  4.1955 +      <Filter>Header Files</Filter>
  4.1956 +    </ClInclude>
  4.1957 +    <ClInclude Include="..\..\asn.1\Version.h">
  4.1958 +      <Filter>Header Files</Filter>
  4.1959 +    </ClInclude>
  4.1960 +    <ClInclude Include="..\..\asn.1\xer_decoder.h">
  4.1961 +      <Filter>Header Files</Filter>
  4.1962 +    </ClInclude>
  4.1963 +    <ClInclude Include="..\..\asn.1\xer_encoder.h">
  4.1964 +      <Filter>Header Files</Filter>
  4.1965 +    </ClInclude>
  4.1966 +    <ClInclude Include="..\..\asn.1\xer_support.h">
  4.1967 +      <Filter>Header Files</Filter>
  4.1968 +    </ClInclude>
  4.1969    </ItemGroup>
  4.1970  </Project>
  4.1971 \ No newline at end of file
     5.1 --- a/build-windows/pEpEngine.vcxproj	Tue Jun 30 14:56:25 2020 +0200
     5.2 +++ b/build-windows/pEpEngine.vcxproj	Mon Jul 13 13:41:27 2020 +0200
     5.3 @@ -224,6 +224,9 @@
     5.4        <Project>{9a67164d-b8f8-4601-a24b-28afe774d41c}</Project>
     5.5      </ProjectReference>
     5.6    </ItemGroup>
     5.7 +  <ItemGroup>
     5.8 +    <None Include="generate_code.cmd" />
     5.9 +  </ItemGroup>
    5.10    <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
    5.11    <ImportGroup Label="ExtensionTargets" />
    5.12  </Project>
    5.13 \ No newline at end of file
     6.1 --- a/build-windows/pEpEngine.vcxproj.filters	Tue Jun 30 14:56:25 2020 +0200
     6.2 +++ b/build-windows/pEpEngine.vcxproj.filters	Mon Jul 13 13:41:27 2020 +0200
     6.3 @@ -276,4 +276,9 @@
     6.4    <ItemGroup>
     6.5      <Text Include="..\LICENSE.txt" />
     6.6    </ItemGroup>
     6.7 +  <ItemGroup>
     6.8 +    <None Include="generate_code.cmd">
     6.9 +      <Filter>Quelldateien</Filter>
    6.10 +    </None>
    6.11 +  </ItemGroup>
    6.12  </Project>
    6.13 \ No newline at end of file
     7.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.2 +++ b/release_rc.py	Mon Jul 13 13:41:27 2020 +0200
     7.3 @@ -0,0 +1,218 @@
     7.4 +import subprocess
     7.5 +import re
     7.6 +import sys
     7.7 +import argparse
     7.8 +
     7.9 +parser = argparse.ArgumentParser(description='Automate the RC release process as sanely as possible.')
    7.10 +parser.add_argument('-r','--rev',nargs=1, help="revision number or changeset to tag as next RC")
    7.11 +group = parser.add_mutually_exclusive_group(required=False)
    7.12 +group.add_argument('-v','--version',nargs=4, type=int, help="force this version - bypasses version inference. Format: major minor patch RC")
    7.13 +group.add_argument('--rc', type=int, help="force this RC number on the inferred version")
    7.14 +args = parser.parse_args()
    7.15 +
    7.16 +# Note: we could get this from the macros, but since folks seem to be actually upgrading 
    7.17 +# the release tag manually correctly and not the macro, let's just check both
    7.18 +cmd = ["hg", "log", "-r", ".", "--template", "\"{latesttag(r're:Release_[0-9]+\.[0-9]+\.[0-9]+-RC[0-9]+')}\""]
    7.19 +result = subprocess.run(cmd, capture_output=True)
    7.20 +release_string = result.stdout.decode("utf-8").replace('"','')
    7.21 +#print(release_string)
    7.22 +
    7.23 +changeset = args.rev # can be None :)
    7.24 +
    7.25 +major = -1
    7.26 +minor = -1
    7.27 +patch = -1
    7.28 +rc = -1
    7.29 +
    7.30 +if args.version:
    7.31 +    major = args.version[0]
    7.32 +    minor = args.version[1]
    7.33 +    patch = args.version[2]
    7.34 +    rc = args.version[3]
    7.35 +    #print(rc)
    7.36 +    if (major < 0) or (minor < 0) or (patch < 0) or (rc < 0):
    7.37 +        raise Exception("Version numbers must all be positive values.")
    7.38 +elif args.rc:
    7.39 +    rc = args.rc
    7.40 +    if (rc < 0):
    7.41 +        raise Exception("RC numbers must all be positive values.")
    7.42 +
    7.43 +#define PEP_ENGINE_VERSION_MAJOR 2
    7.44 +#define PEP_ENGINE_VERSION_MINOR 1
    7.45 +#define PEP_ENGINE_VERSION_PATCH 0
    7.46 +#define PEP_ENGINE_VERSION_RC    13
    7.47 +
    7.48 +# Amateur hour. Biteme.
    7.49 +cmd = ["grep", "-E", "#define PEP_ENGINE_VERSION_[A-Z]+[ \t]+[0-9]+", "src/pEpEngine.h"]
    7.50 +result = subprocess.run(cmd, capture_output=True)
    7.51 +grep_output = result.stdout.decode("utf-8")
    7.52 +#print(grep_output)
    7.53 +
    7.54 +if not args.version:
    7.55 +    src_nums = []
    7.56 +    src_nums = re.findall(r'([0-9]+)', grep_output)
    7.57 +        
    7.58 +    if not src_nums:
    7.59 +        raise Exception("Somehow, the source values for the engine versions were not found in src/pEpEngine.h. Aborting.")
    7.60 +    if len(src_nums) != 4:
    7.61 +        raise Exception("Somehow, we could not extract all version numbers from the header file src/pEpEngine.h. Aborting.")
    7.62 +            
    7.63 +    tag_nums = []
    7.64 +    if release_string.startswith("Release_"):
    7.65 +        tag_nums = re.findall(r'([0-9]+)', release_string)
    7.66 +    #    for num in tagnums:
    7.67 +    #        print (num)
    7.68 +
    7.69 +    if not tag_nums or len(tag_nums) != 4:
    7.70 +        if not tag_nums:
    7.71 +            print("Wow... there is no extant release tag. What did you do, wipe the repository?")
    7.72 +        else:
    7.73 +            print("Somehow, there was an error with the numbering of the tag \"" + release_string + "\"")
    7.74 +        print("Do you want to continue? We'll make a tag from the source RC info. (Y/N)[enter]")
    7.75 +        a = input().lower()
    7.76 +        if not (a.startswith("y") or a.startswith("Y")):
    7.77 +            sys.exit()
    7.78 +            
    7.79 +    force = False
    7.80 +
    7.81 +    if len(tag_nums) == 4 and src_nums:
    7.82 +        major_tag = int(tag_nums[0])
    7.83 +        major_src = int(src_nums[0])
    7.84 +        minor_tag = int(tag_nums[1])
    7.85 +        minor_src = int(src_nums[1])
    7.86 +        patch_tag = int(tag_nums[2])
    7.87 +        patch_src = int(src_nums[2])
    7.88 +        rc_tag = int(tag_nums[3])
    7.89 +        rc_src = int(src_nums[3])
    7.90 +
    7.91 +        print("Inferring current/next version info for automatic upgrade:")
    7.92 +        print("Tagged (should show current):                    " + str(major_tag) + "." + str(minor_tag) + "." + str(patch_tag) + "." + str(rc_tag))
    7.93 +        print("Source (should show *next* (i.e. this upgrade)): " + str(major_src) + "." + str(minor_src) + "." + str(patch_src) + "." + str(rc_src))            
    7.94 +            
    7.95 +        if (major_tag == major_src):
    7.96 +            major = major_tag
    7.97 +            if (minor_tag == minor_src):
    7.98 +                minor = minor_tag
    7.99 +                if (patch_tag == patch_src):
   7.100 +                    patch = patch_tag
   7.101 +                    # Hoorah, we're just changing the RC number.
   7.102 +                    if (rc < 0):
   7.103 +                        if (rc_tag == (rc_src - 1)):
   7.104 +                            # Best case!
   7.105 +                            rc = rc_src
   7.106 +                        elif (rc_tag == rc_src):
   7.107 +                            print("Someone was naughty and didn't bump the RC number in the src, or you made a mistake you want to fix.")
   7.108 +                            print("Current tagged version is " + str(major) + "." + str(minor) + "." + str(patch) + " RC" + rc_tag + ".")
   7.109 +                            print("(I)ncrement,(F)orce same version,(A)bort? [enter]")
   7.110 +                            a = input().lower()
   7.111 +                            a = lower(a)
   7.112 +                            if (a.startswith(i)):
   7.113 +                                rc = rc_tag + 1
   7.114 +                            elif (a.startswith(f)):
   7.115 +                                rc = rc_tag
   7.116 +                                force = True 
   7.117 +                            else:
   7.118 +                                print("Aborting...")
   7.119 +                                sys.exit()
   7.120 +                        else:
   7.121 +                            print("RC numbers are messed up. The last tagged version is " + str(rc_tag) + ", while the last source version is " + str(rc_src) + ".")
   7.122 +                            print("Please enter the RC version you want to use, followed by enter:")
   7.123 +                            a = input().lower()
   7.124 +                            rc = int(a) # Will raise value error if not a number. User deserves it, frankly.
   7.125 +                    
   7.126 +                    #Ok, we now have a value. Good.
   7.127 +                    
   7.128 +        # This feels extremely suboptimal, but I'm tired and don't care            
   7.129 +        if (rc < 0):
   7.130 +            if (major < 0):
   7.131 +                if (major_src == major_tag + 1) and (minor_src == 0) and (patch_src == 0):
   7.132 +                    major = major_src
   7.133 +                    minor = 0
   7.134 +                    patch = 0
   7.135 +                else:
   7.136 +                    print("Tagged release major version and source versions are too different for automatic deduction. Please do this manually.")
   7.137 +                    sys.exit()
   7.138 +            elif (minor < 0):
   7.139 +                if (minor_src == minor_tag + 1) and (patch_src == 0):
   7.140 +                    minor = minor_src
   7.141 +                    patch = 0
   7.142 +                else:
   7.143 +                    print("Tagged release major version and source versions are too different for automatic deduction. Please do this manually.")
   7.144 +                    sys.exit()
   7.145 +            elif (patch_src == patch_tag + 1):
   7.146 +                patch = patch_src
   7.147 +            else:
   7.148 +                print("Tagged release major version and source versions are too different for automatic deduction. Please do this manually.")
   7.149 +                sys.exit()    
   7.150 +            # if we got this far, it was a version upgrade.
   7.151 +
   7.152 +            if (rc_src > 0):
   7.153 +                print("We detected a version upgrade, but the source indicates the next RC is RC " + str(rc_src))
   7.154 +                print("(K)eep,(R)eset to 0,(A)bort? [enter]")
   7.155 +                a = input().lower()
   7.156 +                
   7.157 +                if a.startswith("k"):
   7.158 +                    rc = rc_src
   7.159 +                elif a.startswith("r"):
   7.160 +                    rc = 0
   7.161 +                else:
   7.162 +                    print("Aborting...")       
   7.163 +            else:
   7.164 +                rc = 0
   7.165 +
   7.166 +# Ok, so now, after all that, we should have the right version numbers.
   7.167 +
   7.168 +# If there's no changeset to tag, we take the latest local default
   7.169 +if not changeset:
   7.170 +    cmd = ["hg", "id", "-i", "-r", "default"]
   7.171 +    result = subprocess.run(cmd, capture_output=True)
   7.172 +    changeset = result.stdout.decode("utf-8").replace('"','').replace('\n','')
   7.173 +    if not changeset:
   7.174 +        raise Exception("Unable to determine latest default changeset. Aborting.")
   7.175 +
   7.176 +        
   7.177 +rev_tag = "Release_" + str(major) + "." + str(minor) + "." + str(patch) + "-RC" + str(rc)
   7.178 +
   7.179 +print("Preparing to tag changeset " + changeset + " with tag " + rev_tag + ".\n\nProceed? (Y/N) [enter]")
   7.180 +a = input().lower()
   7.181 +if not (a.startswith("y")):
   7.182 +    sys.exit()
   7.183 +
   7.184 +cmd = ["hg", "tag", "-r", changeset, rev_tag]  
   7.185 +subprocess.run(cmd, check=True, capture_output=False)
   7.186 +
   7.187 +if not grep_output:
   7.188 +    print("Information: Not writing version/RC info to src/pEpEngine.h")
   7.189 +    sys.exit()
   7.190 +
   7.191 +# If successful, then bump the RC
   7.192 +with open('src/pEpEngine.h', 'r') as file :
   7.193 +  filedata = file.read()
   7.194 +
   7.195 +grep_strs = grep_output.split("\n")
   7.196 +
   7.197 +cmd = ["grep", "-E", "#define PEP_ENGINE_VERSION[ \t]+\"[0-9]+.[0-9]+.[0-9]+\"", "src/pEpEngine.h"]
   7.198 +result = subprocess.run(cmd, capture_output=True)
   7.199 +grep_output = result.stdout.decode("utf-8")
   7.200 +
   7.201 +#define PEP_ENGINE_VERSION "2.1.0"
   7.202 +version_str = str(major) + "." + str(minor) + "." + str(patch)
   7.203 +
   7.204 +filedata = filedata.replace(grep_output, "#define PEP_ENGINE_VERSION \"" + version_str + "\"\n")
   7.205 +filedata = filedata.replace(grep_strs[0], "#define PEP_ENGINE_VERSION_MAJOR " + str(major))
   7.206 +filedata = filedata.replace(grep_strs[1], "#define PEP_ENGINE_VERSION_MINOR " + str(minor))
   7.207 +filedata = filedata.replace(grep_strs[2], "#define PEP_ENGINE_VERSION_PATCH " + str(patch))
   7.208 +filedata = filedata.replace(grep_strs[3], "#define PEP_ENGINE_VERSION_RC    " + str(rc + 1))
   7.209 +
   7.210 +# Write the file out again
   7.211 +with open('src/pEpEngine.h', 'w') as file:
   7.212 +    file.write(filedata)     
   7.213 +
   7.214 +comment = "Automatically bumped RC in source for future release. Next RC after this one will be " + version_str + "-RC" + str(rc + 1) + " **if released**."
   7.215 +#print("about to run with this comment:")
   7.216 +print(comment) 
   7.217 +cmd = ["hg", "commit", "-m", comment]  
   7.218 +subprocess.run(cmd, capture_output=False)
   7.219 +
   7.220 +print("New engine release: " + rev_tag + " Changeset: " + changeset)
   7.221 +                                     
     8.1 --- a/src/baseprotocol.c	Tue Jun 30 14:56:25 2020 +0200
     8.2 +++ b/src/baseprotocol.c	Mon Jul 13 13:41:27 2020 +0200
     8.3 @@ -247,34 +247,40 @@
     8.4  
     8.5      // https://dev.pep.foundation/Engine/MessageToSendPassphrase
     8.6  
     8.7 -    if (session->curr_passphrase) {
     8.8 -        // first try with empty passphrase
     8.9 -        char *passphrase = session->curr_passphrase;
    8.10 -        session->curr_passphrase = NULL;
    8.11 +    // first try with empty passphrase
    8.12 +    char *passphrase = session->curr_passphrase;
    8.13 +    session->curr_passphrase = NULL;
    8.14 +    status = base_prepare_message(session, me, partner, type, payload, size, fpr, result);
    8.15 +    session->curr_passphrase = passphrase;
    8.16 +    if (!(status == PEP_PASSPHRASE_REQUIRED || status == PEP_WRONG_PASSPHRASE))
    8.17 +        return status;
    8.18 +
    8.19 +    if (!EMPTYSTR(session->curr_passphrase)) {
    8.20 +        // try configured passphrase
    8.21          status = base_prepare_message(session, me, partner, type, payload, size, fpr, result);
    8.22 -        session->curr_passphrase = passphrase;
    8.23          if (!(status == PEP_PASSPHRASE_REQUIRED || status == PEP_WRONG_PASSPHRASE))
    8.24              return status;
    8.25      }
    8.26  
    8.27      do {
    8.28 -        // then try passphrases
    8.29 -        status = base_prepare_message(session, me, partner, type, payload, size, fpr, result);
    8.30 +        // then try passphrases from the cache
    8.31 +        status = session->messageToSend(NULL);
    8.32 +
    8.33 +        // if there will be no passphrase then exit
    8.34 +        if (status == PEP_SYNC_NO_CHANNEL)
    8.35 +            break;
    8.36 +
    8.37 +        // if a passphrase is needed ask the app
    8.38          if (status == PEP_PASSPHRASE_REQUIRED || status == PEP_WRONG_PASSPHRASE) {
    8.39 -            status = session->messageToSend(NULL);
    8.40 -            if (status == PEP_PASSPHRASE_REQUIRED || status == PEP_WRONG_PASSPHRASE) {
    8.41 -                pEp_identity *_me = identity_dup(me);
    8.42 -                if (!_me)
    8.43 -                    return PEP_OUT_OF_MEMORY;
    8.44 -                session->notifyHandshake(_me, NULL, SYNC_PASSPHRASE_REQUIRED);
    8.45 -                break;
    8.46 -            }
    8.47 +            pEp_identity* _me = identity_dup(me);
    8.48 +            if (!_me)
    8.49 +                return PEP_OUT_OF_MEMORY;
    8.50 +            session->notifyHandshake(_me, NULL, SYNC_PASSPHRASE_REQUIRED);
    8.51          }
    8.52 -        else {
    8.53 -            break;
    8.54 +        else if (status == PEP_STATUS_OK) {
    8.55 +            status = base_prepare_message(session, me, partner, type, payload, size, fpr, result);
    8.56          }
    8.57 -    } while (!status);
    8.58 +    } while (status == PEP_PASSPHRASE_REQUIRED || status == PEP_WRONG_PASSPHRASE);
    8.59  
    8.60      return status;
    8.61  }
    8.62 -
     9.1 --- a/src/key_reset.c	Tue Jun 30 14:56:25 2020 +0200
     9.2 +++ b/src/key_reset.c	Mon Jul 13 13:41:27 2020 +0200
     9.3 @@ -731,7 +731,7 @@
     9.4      message* output_msg = NULL;
     9.5      
     9.6      status = encrypt_message(session, reset_msg, NULL,
     9.7 -                             &output_msg, PEP_enc_PGP_MIME,
     9.8 +                             &output_msg, PEP_enc_auto,
     9.9                               PEP_encrypt_flag_key_reset_only);
    9.10  
    9.11      if (status == PEP_STATUS_OK)
    9.12 @@ -977,7 +977,7 @@
    9.13          
    9.14          // encrypt this baby and get out
    9.15          // extra keys???
    9.16 -        status = encrypt_message(session, outmsg, NULL, &enc_msg, PEP_enc_PGP_MIME, PEP_encrypt_flag_key_reset_only);
    9.17 +        status = encrypt_message(session, outmsg, NULL, &enc_msg, PEP_enc_auto, PEP_encrypt_flag_key_reset_only);
    9.18          
    9.19          if (status != PEP_STATUS_OK) {
    9.20              goto pEp_free;
    10.1 --- a/src/keymanagement.c	Tue Jun 30 14:56:25 2020 +0200
    10.2 +++ b/src/keymanagement.c	Mon Jul 13 13:41:27 2020 +0200
    10.3 @@ -577,6 +577,7 @@
    10.4      }
    10.5      
    10.6      transfer_ident_lang_and_flags(return_id, stored_ident);
    10.7 +    return_id->enc_format = stored_ident->enc_format;    
    10.8          
    10.9      if (return_id->comm_type == PEP_ct_unknown)
   10.10          return_id->comm_type = PEP_ct_key_not_found;
   10.11 @@ -2127,4 +2128,3 @@
   10.12      }
   10.13      return status;
   10.14  }
   10.15 -
    11.1 --- a/src/message.h	Tue Jun 30 14:56:25 2020 +0200
    11.2 +++ b/src/message.h	Mon Jul 13 13:41:27 2020 +0200
    11.3 @@ -31,17 +31,6 @@
    11.4      PEP_dir_outgoing
    11.5  } PEP_msg_direction;
    11.6  
    11.7 -typedef enum _PEP_enc_format {
    11.8 -    PEP_enc_none = 0,                       // message is not encrypted
    11.9 -    PEP_enc_pieces = 1,                     // inline PGP + PGP extensions, was removed
   11.10 -    PEP_enc_inline = 1,                     // still there
   11.11 -    PEP_enc_S_MIME,                         // RFC5751
   11.12 -    PEP_enc_PGP_MIME,                       // RFC3156
   11.13 -    PEP_enc_PEP,                            // pEp encryption format
   11.14 -    PEP_enc_PGP_MIME_Outlook1,              // Message B0rken by Outlook type 1
   11.15 -    PEP_enc_inline_EA
   11.16 -} PEP_enc_format;
   11.17 -
   11.18  struct _message_ref_list;
   11.19  
   11.20  typedef struct _message {
    12.1 --- a/src/message_api.c	Tue Jun 30 14:56:25 2020 +0200
    12.2 +++ b/src/message_api.c	Mon Jul 13 13:41:27 2020 +0200
    12.3 @@ -6,6 +6,7 @@
    12.4  
    12.5  #include "pEp_internal.h"
    12.6  #include "message_api.h"
    12.7 +#include "pEpEngine.h"
    12.8  
    12.9  #include "platform.h"
   12.10  #include "mime.h"
   12.11 @@ -301,8 +302,18 @@
   12.12      assert(shortmsg);
   12.13      
   12.14      unsigned char pEpstr[] = PEP_SUBJ_STRING;
   12.15 -    assert(strcmp(shortmsg, "pEp") != 0 && _unsigned_signed_strcmp(pEpstr, shortmsg, PEP_SUBJ_BYTELEN) != 0); 
   12.16 +
   12.17 +    // assert(strcmp(shortmsg, "pEp") != 0 && _unsigned_signed_strcmp(pEpstr, shortmsg, PEP_SUBJ_BYTELEN) != 0); 
   12.18 +    // in case encrypt_message() is called twice with a different passphrase this was done already
   12.19      
   12.20 +    if (strcmp(shortmsg, "pEp") == 0 || _unsigned_signed_strcmp(pEpstr, shortmsg, PEP_SUBJ_BYTELEN) == 0) {
   12.21 +        char *ptext = strdup(longmsg);
   12.22 +        assert(ptext);
   12.23 +        if (!ptext)
   12.24 +            return NULL;
   12.25 +        return ptext;
   12.26 +    }
   12.27 +
   12.28      if (!shortmsg || strcmp(shortmsg, "pEp") == 0 || 
   12.29                       _unsigned_signed_strcmp(pEpstr, shortmsg, PEP_SUBJ_BYTELEN) == 0) {
   12.30          if (!longmsg) {
   12.31 @@ -1746,6 +1757,60 @@
   12.32      }                   
   12.33  }
   12.34  
   12.35 +static PEP_STATUS id_list_set_enc_format(PEP_SESSION session, identity_list* id_list, PEP_enc_format enc_format) {
   12.36 +    PEP_STATUS status = PEP_STATUS_OK;
   12.37 +    identity_list* id_list_curr = id_list;
   12.38 +    for ( ; id_list_curr && id_list_curr->ident && status == PEP_STATUS_OK; id_list_curr = id_list_curr->next) {
   12.39 +        status = set_ident_enc_format(session, id_list_curr->ident, enc_format);
   12.40 +    }
   12.41 +    return status;
   12.42 +}
   12.43 +
   12.44 +// N.B.
   12.45 +// depends on update_identity and friends having already been called on list
   12.46 +static void update_encryption_format(identity_list* id_list, PEP_enc_format* enc_format) {
   12.47 +    identity_list* id_list_curr;
   12.48 +    for (id_list_curr = id_list; id_list_curr && id_list_curr->ident; id_list_curr = id_list_curr->next) {
   12.49 +        PEP_enc_format format = id_list_curr->ident->enc_format;
   12.50 +        if (format != PEP_enc_none) {
   12.51 +            *enc_format = format;
   12.52 +            break;
   12.53 +        }
   12.54 +    }
   12.55 +}
   12.56 +
   12.57 +PEP_STATUS probe_encrypt(PEP_SESSION session, const char *fpr)
   12.58 +{
   12.59 +    assert(session);
   12.60 +    if (!session)
   12.61 +        return PEP_ILLEGAL_VALUE;
   12.62 +
   12.63 +    if (EMPTYSTR(fpr))
   12.64 +        return PEP_KEY_NOT_FOUND;
   12.65 +
   12.66 +    stringlist_t *keylist = new_stringlist(fpr);
   12.67 +    if (!keylist)
   12.68 +        return PEP_OUT_OF_MEMORY;
   12.69 +
   12.70 +    char *ctext = NULL;
   12.71 +    size_t csize = 0;
   12.72 +    PEP_STATUS status = encrypt_and_sign(session, keylist, "pEp", 4, &ctext, &csize);
   12.73 +    free(ctext);
   12.74 +
   12.75 +    return status;
   12.76 +}
   12.77 +
   12.78 +static bool failed_test(PEP_STATUS status)
   12.79 +{
   12.80 +    if (status == PEP_OUT_OF_MEMORY ||
   12.81 +            status == PEP_PASSPHRASE_REQUIRED ||
   12.82 +            status == PEP_WRONG_PASSPHRASE  ||
   12.83 +            status == PEP_PASSPHRASE_FOR_NEW_KEYS_REQUIRED)
   12.84 +        return true;
   12.85 +
   12.86 +    return false;
   12.87 +}
   12.88 +
   12.89  DYNAMIC_API PEP_STATUS encrypt_message(
   12.90          PEP_SESSION session,
   12.91          message *src,
   12.92 @@ -1794,6 +1859,11 @@
   12.93      if (status != PEP_STATUS_OK)
   12.94          goto pEp_error;
   12.95  
   12.96 +    // is a passphrase needed?
   12.97 +    status = probe_encrypt(session, src->from->fpr);
   12.98 +    if (failed_test(status))
   12.99 +        return status;
  12.100 +
  12.101      char* send_fpr = strdup(src->from->fpr ? src->from->fpr : "");
  12.102      src->_sender_fpr = send_fpr;
  12.103      
  12.104 @@ -2006,6 +2076,23 @@
  12.105      
  12.106      if (max_version_major == 1)
  12.107          force_v_1 = true;
  12.108 +
  12.109 +    if (enc_format == PEP_enc_auto) {
  12.110 +        update_encryption_format(src->to, &enc_format);
  12.111 +        if (enc_format == PEP_enc_auto && src->cc)
  12.112 +            update_encryption_format(src->cc, &enc_format);
  12.113 +        if (enc_format == PEP_enc_auto && src->bcc)
  12.114 +            update_encryption_format(src->bcc, &enc_format);
  12.115 +        if (enc_format == PEP_enc_auto)
  12.116 +            enc_format = PEP_enc_PEP;
  12.117 +    }    
  12.118 +    else if (enc_format != PEP_enc_none) {
  12.119 +        status = id_list_set_enc_format(session, src->to, enc_format);
  12.120 +        status = ((status != PEP_STATUS_OK || !(src->cc)) ? status : id_list_set_enc_format(session, src->cc, enc_format));
  12.121 +        status = ((status != PEP_STATUS_OK || !(src->bcc)) ? status : id_list_set_enc_format(session, src->bcc, enc_format));
  12.122 +        if (status != PEP_STATUS_OK)
  12.123 +            goto pEp_error;
  12.124 +    }
  12.125          
  12.126      if (enc_format == PEP_enc_none || !dest_keys_found ||
  12.127          stringlist_length(keys)  == 0 ||
  12.128 @@ -2186,6 +2273,11 @@
  12.129      if (status != PEP_STATUS_OK)
  12.130          goto pEp_free;
  12.131  
  12.132 +    // is a passphrase needed?
  12.133 +    status = probe_encrypt(session, own_identity->fpr);
  12.134 +    if (failed_test(status))
  12.135 +        goto pEp_free;
  12.136 +
  12.137      // Ok, now we know the address is an own address. All good. Then...
  12.138      own_private_fpr = own_identity->fpr;
  12.139      own_identity->fpr = strdup(to_fpr);
  12.140 @@ -2368,6 +2460,11 @@
  12.141      if (!target_fpr)
  12.142          return PEP_KEY_NOT_FOUND; // FIXME: Error condition
  12.143   
  12.144 +    // is a passphrase needed?
  12.145 +    status = probe_encrypt(session, target_fpr);
  12.146 +    if (failed_test(status))
  12.147 +        return status;
  12.148 +
  12.149      keys = new_stringlist(target_fpr);
  12.150      
  12.151      stringlist_t *_k = keys;
  12.152 @@ -3725,6 +3822,11 @@
  12.153                                      
  12.154          pull_up_attached_main_msg(src);
  12.155          
  12.156 +        if (imported_key_fprs)
  12.157 +            *imported_key_fprs = _imported_key_list;
  12.158 +        if (changed_public_keys)
  12.159 +            *changed_public_keys = _changed_keys;
  12.160 +        
  12.161          return PEP_UNENCRYPTED;
  12.162      }
  12.163  
  12.164 @@ -5345,34 +5447,40 @@
  12.165  
  12.166      // https://dev.pep.foundation/Engine/MessageToSendPassphrase
  12.167  
  12.168 -    if (session->curr_passphrase) {
  12.169 -        // first try with empty passphrase
  12.170 -        char *passphrase = session->curr_passphrase;
  12.171 -        session->curr_passphrase = NULL;
  12.172 +    // first try with empty passphrase
  12.173 +    char* passphrase = session->curr_passphrase;
  12.174 +    session->curr_passphrase = NULL;
  12.175 +    status = encrypt_message(session, src, extra, dst, enc_format, flags);
  12.176 +    session->curr_passphrase = passphrase;
  12.177 +    if (!(status == PEP_PASSPHRASE_REQUIRED || status == PEP_WRONG_PASSPHRASE))
  12.178 +        return status;
  12.179 +
  12.180 +    if (!EMPTYSTR(session->curr_passphrase)) {
  12.181 +        // try configured passphrase
  12.182          status = encrypt_message(session, src, extra, dst, enc_format, flags);
  12.183 -        session->curr_passphrase = passphrase;
  12.184          if (!(status == PEP_PASSPHRASE_REQUIRED || status == PEP_WRONG_PASSPHRASE))
  12.185              return status;
  12.186      }
  12.187  
  12.188      do {
  12.189 -        // then try passphrases
  12.190 -        status = encrypt_message(session, src, extra, dst, enc_format, flags);
  12.191 +        // then try passphrases from the cache
  12.192 +        status = session->messageToSend(NULL);
  12.193 +
  12.194 +        // if there will be no passphrase then exit
  12.195 +        if (status == PEP_SYNC_NO_CHANNEL)
  12.196 +            break;
  12.197 +
  12.198 +        // if a passphrase is needed ask the app
  12.199          if (status == PEP_PASSPHRASE_REQUIRED || status == PEP_WRONG_PASSPHRASE) {
  12.200 -            status = session->messageToSend(NULL);
  12.201 -            if (status == PEP_PASSPHRASE_REQUIRED || status == PEP_WRONG_PASSPHRASE) {
  12.202 -                pEp_identity *me = identity_dup(src->from);
  12.203 -                if (!me)
  12.204 -                    return PEP_OUT_OF_MEMORY;
  12.205 -                session->notifyHandshake(me, NULL, SYNC_PASSPHRASE_REQUIRED);
  12.206 -                break;
  12.207 -            }
  12.208 +            pEp_identity* _me = identity_dup(src->from);
  12.209 +            if (!_me)
  12.210 +                return PEP_OUT_OF_MEMORY;
  12.211 +            session->notifyHandshake(_me, NULL, SYNC_PASSPHRASE_REQUIRED);
  12.212          }
  12.213 -        else {
  12.214 -            break;
  12.215 +        else if (status == PEP_STATUS_OK) {
  12.216 +            status = encrypt_message(session, src, extra, dst, enc_format, flags);
  12.217          }
  12.218 -    } while (!status);
  12.219 +    } while (status == PEP_PASSPHRASE_REQUIRED || status == PEP_WRONG_PASSPHRASE);
  12.220  
  12.221      return status;
  12.222  }
  12.223 -
    13.1 --- a/src/pEpEngine.c	Tue Jun 30 14:56:25 2020 +0200
    13.2 +++ b/src/pEpEngine.c	Mon Jul 13 13:41:27 2020 +0200
    13.3 @@ -85,7 +85,7 @@
    13.4  static const char *sql_get_identity =  
    13.5      "select identity.main_key_id, username, comm_type, lang,"
    13.6      "   identity.flags | pgp_keypair.flags,"
    13.7 -    "   is_own, pEp_version_major, pEp_version_minor"
    13.8 +    "   is_own, pEp_version_major, pEp_version_minor, enc_format"
    13.9      "   from identity"
   13.10      "   join person on id = identity.user_id"
   13.11      "   left join pgp_keypair on fpr = identity.main_key_id"
   13.12 @@ -103,7 +103,7 @@
   13.13  static const char *sql_get_identities_by_main_key_id =  
   13.14      "select address, identity.user_id, username, comm_type, lang,"
   13.15      "   identity.flags | pgp_keypair.flags,"
   13.16 -    "   is_own, pEp_version_major, pEp_version_minor"
   13.17 +    "   is_own, pEp_version_major, pEp_version_minor, enc_format"
   13.18      "   from identity"
   13.19      "   join person on id = identity.user_id"
   13.20      "   left join pgp_keypair on fpr = identity.main_key_id"
   13.21 @@ -115,7 +115,7 @@
   13.22  
   13.23  static const char *sql_get_identity_without_trust_check =  
   13.24      "select identity.main_key_id, username, lang,"
   13.25 -    "   identity.flags, is_own, pEp_version_major, pEp_version_minor"
   13.26 +    "   identity.flags, is_own, pEp_version_major, pEp_version_minor, enc_format"
   13.27      "   from identity"
   13.28      "   join person on id = identity.user_id"
   13.29      "   where (case when (address = ?1) then (1)"
   13.30 @@ -129,7 +129,7 @@
   13.31  
   13.32  static const char *sql_get_identities_by_address =  
   13.33      "select user_id, identity.main_key_id, username, lang,"
   13.34 -    "   identity.flags, is_own, pEp_version_major, pEp_version_minor"
   13.35 +    "   identity.flags, is_own, pEp_version_major, pEp_version_minor, enc_format"
   13.36      "   from identity"
   13.37      "   join person on id = identity.user_id"
   13.38      "   where (case when (address = ?1) then (1)"
   13.39 @@ -143,7 +143,7 @@
   13.40  static const char *sql_get_identities_by_userid =  
   13.41      "select address, identity.main_key_id, username, comm_type, lang,"
   13.42      "   identity.flags | pgp_keypair.flags,"
   13.43 -    "   is_own, pEp_version_major, pEp_version_minor"
   13.44 +    "   is_own, pEp_version_major, pEp_version_minor, enc_format"
   13.45      "   from identity"
   13.46      "   join person on id = identity.user_id"
   13.47      "   left join pgp_keypair on fpr = identity.main_key_id"
   13.48 @@ -315,6 +315,16 @@
   13.49      "          end) = 1"
   13.50      "          and user_id = ?3 ;";
   13.51  
   13.52 +static const char *sql_set_ident_enc_format =
   13.53 +    "update identity "
   13.54 +    "   set enc_format = ?1 "
   13.55 +    "   where (case when (address = ?2) then (1)"
   13.56 +    "               when (lower(address) = lower(?2)) then (1)"
   13.57 +    "               when (replace(lower(address),'.','') = replace(lower(?2),'.','')) then (1) "
   13.58 +    "               else 0 "
   13.59 +    "          end) = 1 "
   13.60 +    "          and user_id = ?3 ;";
   13.61 +
   13.62  static const char *sql_set_pEp_version =
   13.63      "update identity "
   13.64      "   set pEp_version_major = ?1, "
   13.65 @@ -1061,7 +1071,7 @@
   13.66      sqlite3_busy_timeout(_session->system_db, 1000);
   13.67  
   13.68  // increment this when patching DDL
   13.69 -#define _DDL_USER_VERSION "13"
   13.70 +#define _DDL_USER_VERSION "14"
   13.71  
   13.72      if (in_first) {
   13.73  
   13.74 @@ -1123,7 +1133,8 @@
   13.75                  "   flags integer default 0,\n"
   13.76                  "   is_own integer default 0,\n"
   13.77                  "   pEp_version_major integer default 0,\n"
   13.78 -                "   pEp_version_minor integer default 0,\n"                
   13.79 +                "   pEp_version_minor integer default 0,\n"
   13.80 +                "   enc_format integer default 0,\n"               
   13.81                  "   timestamp integer default (datetime('now')),\n"
   13.82                  "   primary key (address, user_id)\n"
   13.83                  ");\n"
   13.84 @@ -1235,7 +1246,10 @@
   13.85          // Sometimes the user_version wasn't set correctly. 
   13.86          if (version == 1) {
   13.87              bool version_changed = true;
   13.88 -            if (table_contains_column(_session, "revocation_contact_list", "own_address")) {
   13.89 +            if (table_contains_column(_session, "identity", "enc_format")) {
   13.90 +                version = 14;
   13.91 +            }
   13.92 +            else if (table_contains_column(_session, "revocation_contact_list", "own_address")) {
   13.93                  version = 13;
   13.94              }
   13.95              else if (table_contains_column(_session, "identity", "pEp_version_major")) {
   13.96 @@ -1695,7 +1709,19 @@
   13.97                  assert(status == PEP_STATUS_OK);
   13.98                  if (status != PEP_STATUS_OK)
   13.99                      return status;
  13.100 -            }        
  13.101 +            }
  13.102 +            if (version < 14) {
  13.103 +                int_result = sqlite3_exec(
  13.104 +                    _session->db,
  13.105 +                    "alter table identity\n"
  13.106 +                    "   add column enc_format integer default 0;\n",
  13.107 +                    NULL,
  13.108 +                    NULL,
  13.109 +                    NULL
  13.110 +                );
  13.111 +                assert(int_result == SQLITE_OK);
  13.112 +            }
  13.113 +                    
  13.114          }        
  13.115          else { 
  13.116              // Version from DB was 0, it means this is initial setup.
  13.117 @@ -1909,6 +1935,11 @@
  13.118              NULL);
  13.119      assert(int_result == SQLITE_OK);
  13.120  
  13.121 +    int_result = sqlite3_prepare_v2(_session->db, sql_set_ident_enc_format,
  13.122 +            (int)strlen(sql_set_ident_enc_format), &_session->set_ident_enc_format,
  13.123 +            NULL);
  13.124 +    assert(int_result == SQLITE_OK);
  13.125 +            
  13.126      int_result = sqlite3_prepare_v2(_session->db, sql_set_pEp_version,
  13.127              (int)strlen(sql_set_pEp_version), &_session->set_pEp_version,
  13.128              NULL);
  13.129 @@ -2183,6 +2214,8 @@
  13.130                  sqlite3_finalize(session->set_identity_flags);
  13.131              if (session->unset_identity_flags)
  13.132                  sqlite3_finalize(session->unset_identity_flags);
  13.133 +            if (session->set_ident_enc_format)
  13.134 +                sqlite3_finalize(session->set_ident_enc_format);
  13.135              if (session->set_pEp_version)
  13.136                  sqlite3_finalize(session->set_pEp_version);                
  13.137              if (session->exists_trust_entry)
  13.138 @@ -2808,7 +2841,8 @@
  13.139              sqlite3_column_int(session->get_identity, 6);
  13.140          _identity->minor_ver =
  13.141              sqlite3_column_int(session->get_identity, 7);
  13.142 -    
  13.143 +        _identity->enc_format =    
  13.144 +            sqlite3_column_int(session->get_identity, 8);    
  13.145          *identity = _identity;
  13.146          break;
  13.147      default:
  13.148 @@ -2886,6 +2920,9 @@
  13.149              sqlite3_column_int(session->get_identities_by_userid, 7);
  13.150          ident->minor_ver =
  13.151              sqlite3_column_int(session->get_identities_by_userid, 8);
  13.152 +        ident->enc_format =    
  13.153 +            sqlite3_column_int(session->get_identities_by_userid, 9);    
  13.154 +            
  13.155      
  13.156          identity_list_add(*identities, ident);
  13.157          ident = NULL;
  13.158 @@ -2956,6 +2993,8 @@
  13.159              sqlite3_column_int(session->get_identities_by_main_key_id, 7);
  13.160          ident->minor_ver =
  13.161              sqlite3_column_int(session->get_identities_by_main_key_id, 8);
  13.162 +        ident->enc_format =    
  13.163 +            sqlite3_column_int(session->get_identities_by_main_key_id, 9);                
  13.164      
  13.165          identity_list_add(*identities, ident);
  13.166          ident = NULL;
  13.167 @@ -3030,6 +3069,8 @@
  13.168              sqlite3_column_int(session->get_identity_without_trust_check, 5);
  13.169          _identity->minor_ver =
  13.170              sqlite3_column_int(session->get_identity_without_trust_check, 6);
  13.171 +        _identity->enc_format =    
  13.172 +            sqlite3_column_int(session->get_identity_without_trust_check, 7);                
  13.173      
  13.174          *identity = _identity;
  13.175          break;
  13.176 @@ -3099,7 +3140,9 @@
  13.177              sqlite3_column_int(session->get_identities_by_address, 6);
  13.178          ident->minor_ver =
  13.179              sqlite3_column_int(session->get_identities_by_address, 7);
  13.180 -    
  13.181 +        ident->enc_format =    
  13.182 +            sqlite3_column_int(session->get_identities_by_address, 8);               
  13.183 +                 
  13.184          if (ident_list)
  13.185              identity_list_add(ident_list, ident);
  13.186          else
  13.187 @@ -3981,6 +4024,38 @@
  13.188      return PEP_STATUS_OK;
  13.189  }
  13.190  
  13.191 +DYNAMIC_API PEP_STATUS set_ident_enc_format(
  13.192 +        PEP_SESSION session,
  13.193 +        pEp_identity *identity,
  13.194 +        PEP_enc_format format
  13.195 +    )
  13.196 +{
  13.197 +    int result;
  13.198 +
  13.199 +    assert(session);
  13.200 +    assert(identity);
  13.201 +    assert(identity->address);
  13.202 +    assert(identity->user_id);
  13.203 +
  13.204 +    if (!(session && identity && identity->address && identity->user_id))
  13.205 +        return PEP_ILLEGAL_VALUE;
  13.206 +
  13.207 +    sqlite3_reset(session->set_ident_enc_format);
  13.208 +    sqlite3_bind_int(session->set_ident_enc_format, 1, format);
  13.209 +    sqlite3_bind_text(session->set_ident_enc_format, 2, identity->address, -1,
  13.210 +            SQLITE_STATIC);
  13.211 +    sqlite3_bind_text(session->set_ident_enc_format, 3, identity->user_id, -1,
  13.212 +        SQLITE_STATIC);
  13.213 +        
  13.214 +    result = sqlite3_step(session->set_ident_enc_format);
  13.215 +
  13.216 +    sqlite3_reset(session->set_ident_enc_format);
  13.217 +    if (result != SQLITE_DONE)
  13.218 +        return PEP_CANNOT_SET_IDENTITY;
  13.219 +
  13.220 +    return PEP_STATUS_OK;
  13.221 +}
  13.222 +
  13.223  PEP_STATUS get_trust_by_userid(PEP_SESSION session, const char* user_id,
  13.224                                             labeled_int_list_t** trust_list)
  13.225  {
  13.226 @@ -4409,7 +4484,7 @@
  13.227                                            const char* new_fpr, const char* compare_fpr) {
  13.228      assert(session);
  13.229      assert(user_id);
  13.230 -    assert(new_fpr);
  13.231 +    assert(compare_fpr);
  13.232      
  13.233      if (!session || !user_id || !compare_fpr)
  13.234          return PEP_ILLEGAL_VALUE;
    14.1 --- a/src/pEpEngine.h	Tue Jun 30 14:56:25 2020 +0200
    14.2 +++ b/src/pEpEngine.h	Mon Jul 13 13:41:27 2020 +0200
    14.3 @@ -25,12 +25,10 @@
    14.4  // RELEASE version this targets
    14.5  // (string: major.minor.patch)
    14.6  #define PEP_ENGINE_VERSION "2.1.0"
    14.7 -
    14.8 -// Numeric values of above:
    14.9  #define PEP_ENGINE_VERSION_MAJOR 2
   14.10  #define PEP_ENGINE_VERSION_MINOR 1
   14.11  #define PEP_ENGINE_VERSION_PATCH 0
   14.12 -#define PEP_ENGINE_VERSION_RC    9
   14.13 +#define PEP_ENGINE_VERSION_RC    17
   14.14  
   14.15  
   14.16  #define PEP_OWN_USERID "pEp_own_userId"
   14.17 @@ -156,6 +154,18 @@
   14.18      PEP_VERSION_MISMATCH                            = -7,
   14.19  } PEP_STATUS;
   14.20  
   14.21 +typedef enum _PEP_enc_format {
   14.22 +    PEP_enc_none = 0,                       // message is not encrypted
   14.23 +    PEP_enc_pieces = 1,                     // inline PGP + PGP extensions, was removed
   14.24 +    PEP_enc_inline = 1,                     // still there
   14.25 +    PEP_enc_S_MIME,                         // RFC5751
   14.26 +    PEP_enc_PGP_MIME,                       // RFC3156
   14.27 +    PEP_enc_PEP,                            // pEp encryption format
   14.28 +    PEP_enc_PGP_MIME_Outlook1,              // Message B0rken by Outlook type 1
   14.29 +    PEP_enc_inline_EA,
   14.30 +    PEP_enc_auto = 255                      // figure out automatically where possible
   14.31 +} PEP_enc_format;
   14.32 +
   14.33  
   14.34  // messageToSend() - a message needs to be delivered by application
   14.35  //
   14.36 @@ -627,8 +637,9 @@
   14.37      char lang[3];               // language of conversation
   14.38                                  // ISO 639-1 ALPHA-2, last byte is 0
   14.39      bool me;                    // if this is the local user herself/himself
   14.40 -    unsigned int major_ver;              // highest version of pEp message received, if any
   14.41 -    unsigned int minor_ver;              // highest version of pEp message received, if any
   14.42 +    unsigned int major_ver;     // highest version of pEp message received, if any
   14.43 +    unsigned int minor_ver;     // highest version of pEp message received, if any
   14.44 +    PEP_enc_format enc_format;  // Last specified format we encrypted to for this identity
   14.45      identity_flags_t flags;     // identity_flag1 | identity_flag2 | ...
   14.46  } pEp_identity;
   14.47  
   14.48 @@ -1453,6 +1464,22 @@
   14.49  DYNAMIC_API PEP_STATUS config_passphrase_for_new_keys(PEP_SESSION session, 
   14.50                                                  bool enable, 
   14.51                                                  const char *passphrase);
   14.52 +// set_ident_enc_format() - set the default encryption format for this identity
   14.53 +//                          (value only MIGHT be used, and only in the case where the
   14.54 +//                          message enc_format is PEP_enc_auto. It will be used 
   14.55 +//                          opportunistically in the case on a first-come, first-serve 
   14.56 +//                          basis in the order of to_list, cc_list, and bcc_list. We take 
   14.57 +//                          the first set value we come to)
   14.58 +//
   14.59 +//  parameters:
   14.60 +//      session (in)            session handle
   14.61 +//      identity (in)           identity->user_id and identity->address must NOT be NULL
   14.62 +//      format (in)             the desired default encryption format
   14.63 +//
   14.64 +DYNAMIC_API PEP_STATUS set_ident_enc_format(PEP_SESSION session,
   14.65 +                                            pEp_identity *identity,
   14.66 +                                            PEP_enc_format format);
   14.67 +
   14.68  
   14.69  PEP_STATUS _generate_keypair(PEP_SESSION session, 
   14.70                               pEp_identity *identity,
   14.71 @@ -1524,7 +1551,7 @@
   14.72  PEP_STATUS set_pgp_keypair(PEP_SESSION session, const char* fpr);
   14.73  
   14.74  PEP_STATUS set_pEp_version(PEP_SESSION session, pEp_identity* ident, unsigned int new_ver_major, unsigned int new_ver_minor);
   14.75 -
   14.76 +                
   14.77  PEP_STATUS clear_trust_info(PEP_SESSION session,
   14.78                              const char* user_id,
   14.79                              const char* fpr);
   14.80 @@ -1574,6 +1601,7 @@
   14.81  
   14.82  PEP_STATUS has_partner_contacted_address(PEP_SESSION session, const char* partner_id,
   14.83                                           const char* own_address, bool* was_contacted);
   14.84 +                                                                                  
   14.85  #ifdef __cplusplus
   14.86  }
   14.87  #endif
    15.1 --- a/src/pEp_internal.h	Tue Jun 30 14:56:25 2020 +0200
    15.2 +++ b/src/pEp_internal.h	Mon Jul 13 13:41:27 2020 +0200
    15.3 @@ -191,6 +191,7 @@
    15.4      sqlite3_stmt *exists_identity_entry;        
    15.5      sqlite3_stmt *set_identity_flags;
    15.6      sqlite3_stmt *unset_identity_flags;
    15.7 +    sqlite3_stmt *set_ident_enc_format;
    15.8      sqlite3_stmt *set_pEp_version; 
    15.9      sqlite3_stmt *clear_trust_info;   
   15.10      sqlite3_stmt *set_trust;
    16.1 --- a/src/pgp_sequoia.c	Tue Jun 30 14:56:25 2020 +0200
    16.2 +++ b/src/pgp_sequoia.c	Mon Jul 13 13:41:27 2020 +0200
    16.3 @@ -234,6 +234,84 @@
    16.4      return result;
    16.5  }
    16.6  
    16.7 +static PEP_STATUS _pgp_get_decrypted_key(PEP_SESSION session,
    16.8 +                                         pgp_cert_valid_key_iter_t iter,
    16.9 +                                         pgp_key_t* decrypted_key) {
   16.10 +
   16.11 +    if (!iter)
   16.12 +        return PEP_UNKNOWN_ERROR; // ???
   16.13 +    
   16.14 +    if (!decrypted_key)
   16.15 +        return PEP_ILLEGAL_VALUE;
   16.16 +        
   16.17 +    PEP_STATUS status = PEP_STATUS_OK;
   16.18 +    
   16.19 +    pgp_error_t err = NULL;    
   16.20 +    bool bad_pass = false;
   16.21 +    bool missing_pass = false;
   16.22 +    pgp_key_t key = NULL;
   16.23 +    *decrypted_key = NULL;
   16.24 +
   16.25 +    pgp_valid_key_amalgamation_t ka = pgp_cert_valid_key_iter_next (iter, NULL, NULL);
   16.26 +
   16.27 +    // FIXME: better error!!!
   16.28 +    if (! ka)
   16.29 +        ERROR_OUT (err, PEP_UNKNOWN_ERROR,
   16.30 +                   "%s has no capable key", fpr);
   16.31 +
   16.32 +    // pgp_key_into_key_pair needs to own the key, but here we
   16.33 +    // only get a reference (which we still need to free).
   16.34 +    
   16.35 +    for ( ; ka ; (ka = pgp_cert_valid_key_iter_next(iter, NULL, NULL))) {                       
   16.36 +        // pgp_key_into_key_pair needs to own the key, but here we
   16.37 +        // only get a reference (which we still need to free).
   16.38 +        key = pgp_valid_key_amalgamation_key (ka);
   16.39 +
   16.40 +        if (pgp_key_has_unencrypted_secret(key)) 
   16.41 +            break;
   16.42 +        else {
   16.43 +            const char* pass = session->curr_passphrase;
   16.44 +            if (pass && pass[0]) {
   16.45 +                pgp_key_t decrypted_key = NULL;
   16.46 +                decrypted_key = pgp_key_decrypt_secret(&err, pgp_key_clone(key), (uint8_t*)session->curr_passphrase,
   16.47 +                                                        strlen(session->curr_passphrase));                             
   16.48 +                pgp_key_free(key);
   16.49 +                key = NULL;
   16.50 +                
   16.51 +                if (!decrypted_key) {                               
   16.52 +                    bad_pass = true;
   16.53 +                    continue;
   16.54 +                }    
   16.55 +                else {
   16.56 +                    key = decrypted_key;
   16.57 +                    break;
   16.58 +                }
   16.59 +            }
   16.60 +            else {
   16.61 +                pgp_key_free(key);
   16.62 +                key = NULL;
   16.63 +                missing_pass = true;
   16.64 +                continue;
   16.65 +            }
   16.66 +        }
   16.67 +    }
   16.68 +    if (!key) {
   16.69 +        if (bad_pass)
   16.70 +            ERROR_OUT(err, PEP_WRONG_PASSPHRASE, "pgp_key_decrypt_secret");
   16.71 +        else if (missing_pass)    
   16.72 +            ERROR_OUT(err, PEP_PASSPHRASE_REQUIRED, "pgp_key_decrypt_secret");
   16.73 +        else        
   16.74 +            ERROR_OUT(err, PEP_UNKNOWN_ERROR, "pgp_valid_key_amalgamation_key");            
   16.75 +    }   
   16.76 +    
   16.77 +out:
   16.78 +    pgp_valid_key_amalgamation_free (ka);
   16.79 +    *decrypted_key = key;
   16.80 +
   16.81 +    T("(%s)-> %s", fpr, pEp_status_to_string(status));
   16.82 +    return status;                                                 
   16.83 +}
   16.84 +
   16.85  PEP_STATUS pgp_init(PEP_SESSION session, bool in_first)
   16.86  {
   16.87      PEP_STATUS status = PEP_STATUS_OK;
   16.88 @@ -1854,10 +1932,7 @@
   16.89      pgp_key_pair_t signing_keypair = NULL;
   16.90      pgp_signer_t signer = NULL;
   16.91      pgp_writer_stack_t ws = NULL;
   16.92 -
   16.93 -    bool bad_pass = false;
   16.94 -    bool missing_pass = false;                    
   16.95 -
   16.96 +    
   16.97      status = cert_find_by_fpr_hex(session, fpr, true, &signer_cert, NULL);
   16.98      ERROR_OUT(NULL, status, "Looking up key '%s'", fpr);
   16.99  
  16.100 @@ -1865,60 +1940,14 @@
  16.101      pgp_cert_valid_key_iter_alive(iter);
  16.102      pgp_cert_valid_key_iter_revoked(iter, false);
  16.103      pgp_cert_valid_key_iter_for_signing (iter);
  16.104 -//    pgp_cert_valid_key_iter_unencrypted_secret (iter);
  16.105 -
  16.106 -    // If there are multiple signing capable subkeys, we just take
  16.107 -    // the first one, whichever one that happens to be.
  16.108 -    ka = pgp_cert_valid_key_iter_next (iter, NULL, NULL);
  16.109 -    if (! ka)
  16.110 -        ERROR_OUT (err, PEP_UNKNOWN_ERROR,
  16.111 +
  16.112 +    pgp_key_t key = NULL;
  16.113 +    status = _pgp_get_decrypted_key(session, iter, &key);
  16.114 +
  16.115 +    if (!key || status != PEP_STATUS_OK) {
  16.116 +        ERROR_OUT (err, status,
  16.117                     "%s has no signing capable key", fpr);
  16.118 -
  16.119 -    // pgp_key_into_key_pair needs to own the key, but here we
  16.120 -    // only get a reference (which we still need to free).
  16.121 -    
  16.122 -    pgp_key_t key = NULL;
  16.123 -    for ( ; ka ; (ka = pgp_cert_valid_key_iter_next(iter, NULL, NULL))) {                       
  16.124 -        // pgp_key_into_key_pair needs to own the key, but here we
  16.125 -        // only get a reference (which we still need to free).
  16.126 -        key = pgp_valid_key_amalgamation_key (ka);
  16.127 -
  16.128 -        if (pgp_key_has_unencrypted_secret(key)) 
  16.129 -            break;
  16.130 -        else {
  16.131 -            const char* pass = session->curr_passphrase;
  16.132 -            if (pass && pass[0]) {
  16.133 -                pgp_key_t decrypted_key = NULL;
  16.134 -                decrypted_key = pgp_key_decrypt_secret(&err, pgp_key_clone(key), (uint8_t*)session->curr_passphrase,
  16.135 -                                                        strlen(session->curr_passphrase));                             
  16.136 -                pgp_key_free(key);
  16.137 -                key = NULL;
  16.138 -                
  16.139 -                if (!decrypted_key) {                               
  16.140 -                    bad_pass = true;
  16.141 -                    continue;
  16.142 -                }    
  16.143 -                else {
  16.144 -                    key = decrypted_key;
  16.145 -                    break;
  16.146 -                }
  16.147 -            }
  16.148 -            else {
  16.149 -                pgp_key_free(key);
  16.150 -                key = NULL;
  16.151 -                missing_pass = true;
  16.152 -                continue;
  16.153 -            }
  16.154 -        }
  16.155 -    }
  16.156 -    if (!key) {
  16.157 -        if (bad_pass)
  16.158 -            ERROR_OUT(err, PEP_WRONG_PASSPHRASE, "pgp_key_decrypt_secret");
  16.159 -        else if (missing_pass)    
  16.160 -            ERROR_OUT(err, PEP_PASSPHRASE_REQUIRED, "pgp_key_decrypt_secret");
  16.161 -        else        
  16.162 -            ERROR_OUT(err, PEP_UNKNOWN_ERROR, "pgp_valid_key_amalgamation_key");            
  16.163 -    }    
  16.164 +    }               
  16.165      
  16.166      signing_keypair = pgp_key_into_key_pair (NULL, pgp_key_clone (key));
  16.167      pgp_key_free (key);
  16.168 @@ -2121,68 +2150,20 @@
  16.169      // pgp_encrypt_new consumes the recipients (but not the keys).
  16.170      recipient_count = 0;
  16.171  
  16.172 -    bool bad_pass = false;
  16.173 -    bool missing_pass = false;                
  16.174 -
  16.175      if (sign) {            
  16.176          
  16.177          iter = pgp_cert_valid_key_iter(signer_cert, session->policy, 0);
  16.178          pgp_cert_valid_key_iter_alive(iter);
  16.179          pgp_cert_valid_key_iter_revoked(iter, false);
  16.180          pgp_cert_valid_key_iter_for_signing (iter);
  16.181 -//        pgp_cert_valid_key_iter_unencrypted_secret (iter);
  16.182 -
  16.183 -        
  16.184 -        // If there are multiple signing capable subkeys, we just take
  16.185 -        // the first one, whichever one that happens to be.            
  16.186 -            
  16.187 -        ka = pgp_cert_valid_key_iter_next (iter, NULL, NULL);
  16.188 -        if (! ka)
  16.189 -            ERROR_OUT (err, PEP_UNKNOWN_ERROR,
  16.190 -                       "%s has no signing capable key", keylist->value);
  16.191  
  16.192          pgp_key_t key = NULL;
  16.193 -        for ( ; ka ; (ka = pgp_cert_valid_key_iter_next(iter, NULL, NULL))) {                       
  16.194 -            // pgp_key_into_key_pair needs to own the key, but here we
  16.195 -            // only get a reference (which we still need to free).
  16.196 -            key = pgp_valid_key_amalgamation_key (ka);
  16.197 -
  16.198 -            if (pgp_key_has_unencrypted_secret(key)) 
  16.199 -                break;
  16.200 -            else {
  16.201 -                const char* pass = session->curr_passphrase;
  16.202 -                if (pass && pass[0]) {
  16.203 -                    pgp_key_t decrypted_key = NULL;
  16.204 -                    decrypted_key = pgp_key_decrypt_secret(&err, pgp_key_clone(key), (uint8_t*)session->curr_passphrase,
  16.205 -                                                            strlen(session->curr_passphrase));                             
  16.206 -                    pgp_key_free(key);
  16.207 -                    key = NULL;
  16.208 -                    
  16.209 -                    if (!decrypted_key) {                               
  16.210 -                        bad_pass = true;
  16.211 -                        continue;
  16.212 -                    }    
  16.213 -                    else {
  16.214 -                        key = decrypted_key;
  16.215 -                        break;
  16.216 -                    }
  16.217 -                }
  16.218 -                else {
  16.219 -                    pgp_key_free(key);
  16.220 -                    key = NULL;
  16.221 -                    missing_pass = true;
  16.222 -                    continue;
  16.223 -                }
  16.224 -            }
  16.225 -        }
  16.226 -        if (!key) {
  16.227 -            if (bad_pass)
  16.228 -                ERROR_OUT(err, PEP_WRONG_PASSPHRASE, "pgp_key_decrypt_secret");
  16.229 -            else if (missing_pass)    
  16.230 -                ERROR_OUT(err, PEP_PASSPHRASE_REQUIRED, "pgp_key_decrypt_secret");
  16.231 -            else        
  16.232 -                ERROR_OUT(err, PEP_UNKNOWN_ERROR, "pgp_valid_key_amalgamation_key");            
  16.233 -        }
  16.234 +        status = _pgp_get_decrypted_key(session, iter, &key);
  16.235 +
  16.236 +        if (!key || status != PEP_STATUS_OK) {
  16.237 +            ERROR_OUT (err, status,
  16.238 +                       "%s has no signing capable key", fpr);
  16.239 +        }               
  16.240                  
  16.241                      
  16.242          signing_keypair = pgp_key_into_key_pair (NULL, pgp_key_clone (key));
  16.243 @@ -3074,19 +3055,18 @@
  16.244  
  16.245      iter = pgp_cert_valid_key_iter(cert, session->policy, 0);
  16.246      pgp_cert_valid_key_iter_for_certification (iter);
  16.247 -    pgp_cert_valid_key_iter_unencrypted_secret (iter);
  16.248      pgp_cert_valid_key_iter_revoked(iter, false);
  16.249  
  16.250 -    // If there are multiple certification capable subkeys, we just
  16.251 -    // take the first one, whichever one that happens to be.
  16.252 -    primary = pgp_cert_valid_key_iter_next (iter, NULL, NULL);
  16.253 -    if (! primary)
  16.254 -        ERROR_OUT (err, PEP_UNKNOWN_ERROR,
  16.255 -                   "%s has no usable certification capable key", fpr);
  16.256 +    pgp_key_t key = NULL;
  16.257 +    status = _pgp_get_decrypted_key(session, iter, &key);
  16.258 +
  16.259 +    if (!key || status != PEP_STATUS_OK) {
  16.260 +        ERROR_OUT (err, status,
  16.261 +                   "%s has no signing capable key", fpr);
  16.262 +    }               
  16.263  
  16.264      // pgp_key_into_key_pair needs to own the key, but here we
  16.265      // only get a reference (which we still need to free).
  16.266 -    pgp_key_t key = pgp_valid_key_amalgamation_key (primary);
  16.267      keypair = pgp_key_into_key_pair (NULL, pgp_key_clone (key));
  16.268      pgp_key_free (key);
  16.269      if (! keypair)
  16.270 @@ -3200,18 +3180,17 @@
  16.271      pgp_cert_valid_key_iter_alive(iter);
  16.272      pgp_cert_valid_key_iter_revoked(iter, false);
  16.273      pgp_cert_valid_key_iter_for_certification (iter);
  16.274 -    pgp_cert_valid_key_iter_unencrypted_secret (iter);
  16.275 -
  16.276 -    // If there are multiple certification capable subkeys, we just
  16.277 -    // take the first one, whichever one that happens to be.
  16.278 -    ka = pgp_cert_valid_key_iter_next (iter, NULL, NULL);
  16.279 -    if (! ka)
  16.280 +
  16.281 +    // pgp_key_into_key_pair needs to own the key, but here we
  16.282 +    // only get a reference (which we still need to free).    
  16.283 +    pgp_key_t key = NULL;
  16.284 +    status = _pgp_get_decrypted_key(session, iter, &key);
  16.285 +
  16.286 +    if (!key || status != PEP_STATUS_OK) {
  16.287          ERROR_OUT (err, PEP_UNKNOWN_ERROR,
  16.288 -                   "%s has no usable certification capable key", fpr);
  16.289 -
  16.290 -    // pgp_key_into_key_pair needs to own the key, but here we
  16.291 -    // only get a reference (which we still need to free).
  16.292 -    pgp_key_t key = pgp_valid_key_amalgamation_key (ka);
  16.293 +                   "%s has no usable certification capable key", fpr);           
  16.294 +    }               
  16.295 +                
  16.296      keypair = pgp_key_into_key_pair (NULL, pgp_key_clone (key));
  16.297      pgp_key_free (key);
  16.298      if (! keypair)
    17.1 --- a/src/sync_api.h	Tue Jun 30 14:56:25 2020 +0200
    17.2 +++ b/src/sync_api.h	Mon Jul 13 13:41:27 2020 +0200
    17.3 @@ -38,6 +38,11 @@
    17.4      // forming group
    17.5      // SYNC_NOTIFY_FORMING_GROUP = 10,
    17.6  
    17.7 +    // these two notifications must be evaluated by applications, which are
    17.8 +    // using a Desktop Adapter
    17.9 +    SYNC_NOTIFY_START = 126,
   17.10 +    SYNC_NOTIFY_STOP = 127,
   17.11 +
   17.12      // message cannot be sent, need passphrase
   17.13      SYNC_PASSPHRASE_REQUIRED = 128,
   17.14  
    18.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    18.2 +++ b/test/src/IdentEncFormatTest.cc	Mon Jul 13 13:41:27 2020 +0200
    18.3 @@ -0,0 +1,514 @@
    18.4 +#include <stdlib.h>
    18.5 +#include <string>
    18.6 +#include <cstring>
    18.7 +
    18.8 +#include "pEpEngine.h"
    18.9 +#include "test_util.h"
   18.10 +#include "TestConstants.h"
   18.11 +#include "Engine.h"
   18.12 +
   18.13 +#include <gtest/gtest.h>
   18.14 +
   18.15 +
   18.16 +namespace {
   18.17 +
   18.18 +	//The fixture for IdentEncFormatTest
   18.19 +    class IdentEncFormatTest : public ::testing::Test {
   18.20 +        public:
   18.21 +            Engine* engine;
   18.22 +            PEP_SESSION session;
   18.23 +
   18.24 +        protected:
   18.25 +            // You can remove any or all of the following functions if its body
   18.26 +            // is empty.
   18.27 +            IdentEncFormatTest() {
   18.28 +                // You can do set-up work for each test here.
   18.29 +                test_suite_name = ::testing::UnitTest::GetInstance()->current_test_info()->GTEST_SUITE_SYM();
   18.30 +                test_name = ::testing::UnitTest::GetInstance()->current_test_info()->name();
   18.31 +                test_path = get_main_test_home_dir() + "/" + test_suite_name + "/" + test_name;
   18.32 +            }
   18.33 +
   18.34 +            ~IdentEncFormatTest() override {
   18.35 +                // You can do clean-up work that doesn't throw exceptions here.
   18.36 +            }
   18.37 +
   18.38 +            // If the constructor and destructor are not enough for setting up
   18.39 +            // and cleaning up each test, you can define the following methods:
   18.40 +
   18.41 +            void SetUp() override {
   18.42 +                // Code here will be called immediately after the constructor (right
   18.43 +                // before each test).
   18.44 +
   18.45 +                // Leave this empty if there are no files to copy to the home directory path
   18.46 +                std::vector<std::pair<std::string, std::string>> init_files = std::vector<std::pair<std::string, std::string>>();
   18.47 +
   18.48 +                // Get a new test Engine.
   18.49 +                engine = new Engine(test_path);
   18.50 +                ASSERT_NE(engine, nullptr);
   18.51 +
   18.52 +                // Ok, let's initialize test directories etc.
   18.53 +                engine->prep(NULL, NULL, init_files);
   18.54 +
   18.55 +                // Ok, try to start this bugger.
   18.56 +                engine->start();
   18.57 +                ASSERT_NE(engine->session, nullptr);
   18.58 +                session = engine->session;
   18.59 +
   18.60 +                // Engine is up. Keep on truckin'
   18.61 +            }
   18.62 +
   18.63 +            void TearDown() override {
   18.64 +                // Code here will be called immediately after each test (right
   18.65 +                // before the destructor).
   18.66 +                engine->shut_down();
   18.67 +                delete engine;
   18.68 +                engine = NULL;
   18.69 +                session = NULL;
   18.70 +            }
   18.71 +            const char* alice_filename = "test_keys/alice-no-passwords.pgp";
   18.72 +            const char* alice_pub_filename = "test_keys/pub/alice-0x2A649B9F_pub.asc";
   18.73 +            const char* bob_filename = "test_keys/bob-primary-with-password-bob-subkey-without.pgp";            
   18.74 +            const char* carol_filename = "test_keys/carol-subkeys-password-carol.pgp";
   18.75 +            const char* david_filename = "test_keys/david-encryption-subkey-password-encrypt-signing-subkey-password-sign.pgp";            
   18.76 +            const char* alice_fpr = "03AF88F728B8E9AADA7F370BD41801C62A649B9F";
   18.77 +            const char* bob_fpr = "5C76378A62B04CF3F41BEC8D4940FC9FA1878736";            
   18.78 +            const char* carol_fpr = "A5B3473EA7CBB5DF7A4F595A8883DC4BCD8BAC06";
   18.79 +            const char* david_fpr = "7F72E4B27C6161455CD9C50FE7A05D7BF3FF4E19";            
   18.80 +            
   18.81 +
   18.82 +        private:
   18.83 +            const char* test_suite_name;
   18.84 +            const char* test_name;
   18.85 +            string test_path;
   18.86 +            // Objects declared here can be used by all tests in the IdentEncFormatTest suite.
   18.87 +
   18.88 +    };
   18.89 +
   18.90 +}  // namespace
   18.91 +
   18.92 +
   18.93 +TEST_F(IdentEncFormatTest, check_ident_enc_format_unspecified) {
   18.94 +    ASSERT_TRUE(slurp_and_import_key(session, carol_filename));
   18.95 +    stringlist_t* found_key = NULL;
   18.96 +    PEP_STATUS status = find_keys(session, carol_fpr, &found_key);
   18.97 +    ASSERT_EQ(status, PEP_STATUS_OK);
   18.98 +    ASSERT_NE(found_key, nullptr);
   18.99 +    ASSERT_NE(found_key->value, nullptr);
  18.100 +    ASSERT_STREQ(found_key->value, carol_fpr);
  18.101 +    ASSERT_EQ(found_key->next, nullptr);
  18.102 +    
  18.103 +    const char* my_fpr = carol_fpr;
  18.104 +    const char* my_name = "Carol Peril";
  18.105 +    const char* my_address = "carol_peril@darthmama.cool";
  18.106 +    pEp_identity* my_ident = new_identity(my_address, my_fpr, PEP_OWN_USERID, my_name);
  18.107 +    status = set_own_key(session, my_ident, my_fpr);
  18.108 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.109 +    
  18.110 +    // Set up "to"
  18.111 +    ASSERT_TRUE(slurp_and_import_key(session, alice_pub_filename));    
  18.112 +    const char* to_fpr = alice_fpr;
  18.113 +    const char* to_name = "Alice Malice";
  18.114 +    const char* to_address = "alice_malice@darthmama.cool";
  18.115 +    pEp_identity* to_ident = new_identity(to_address, to_fpr, "ALICE", to_name);
  18.116 +    status = set_identity(session, to_ident);
  18.117 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.118 +    
  18.119 +    message* msg = new_message(PEP_dir_outgoing);        
  18.120 +    msg->from = my_ident;
  18.121 +    msg->to = new_identity_list(to_ident);
  18.122 +    msg->shortmsg = strdup("This is an exciting message from Carol!");
  18.123 +    msg->longmsg = strdup("Not\nVery\nExciting\n");   
  18.124 +    
  18.125 +    message* enc_msg = NULL;
  18.126 +    status = encrypt_message(session, msg, NULL, &enc_msg, PEP_enc_auto, 0);
  18.127 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.128 +    ASSERT_NE(enc_msg, nullptr);
  18.129 +    
  18.130 +    // FIXME: This is fine for now, but needs to change when they are implemented separately
  18.131 +    ASSERT_TRUE(enc_msg->enc_format == PEP_enc_PEP || enc_msg->enc_format == PEP_enc_PGP_MIME);
  18.132 +    free_message(msg);
  18.133 +    free_message(enc_msg);    
  18.134 +    free_stringlist(found_key);    
  18.135 +}
  18.136 +
  18.137 +TEST_F(IdentEncFormatTest, check_ident_enc_format_specified) {
  18.138 +    ASSERT_TRUE(slurp_and_import_key(session, carol_filename));
  18.139 +    stringlist_t* found_key = NULL;
  18.140 +    PEP_STATUS status = find_keys(session, carol_fpr, &found_key);
  18.141 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.142 +    ASSERT_NE(found_key, nullptr);
  18.143 +    ASSERT_NE(found_key->value, nullptr);
  18.144 +    ASSERT_STREQ(found_key->value, carol_fpr);
  18.145 +    ASSERT_EQ(found_key->next, nullptr);
  18.146 +    
  18.147 +    const char* my_fpr = carol_fpr;
  18.148 +    const char* my_name = "Carol Peril";
  18.149 +    const char* my_address = "carol_peril@darthmama.cool";
  18.150 +    pEp_identity* my_ident = new_identity(my_address, my_fpr, PEP_OWN_USERID, my_name);
  18.151 +    status = set_own_key(session, my_ident, my_fpr);
  18.152 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.153 +    
  18.154 +    // Set up "to"
  18.155 +    ASSERT_TRUE(slurp_and_import_key(session, alice_pub_filename));    
  18.156 +    const char* to_fpr = alice_fpr;
  18.157 +    const char* to_name = "Alice Malice";
  18.158 +    const char* to_address = "alice_malice@darthmama.cool";
  18.159 +    pEp_identity* to_ident = new_identity(to_address, to_fpr, "ALICE", to_name);
  18.160 +    status = set_identity(session, to_ident);
  18.161 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.162 +    
  18.163 +    message* msg = new_message(PEP_dir_outgoing);        
  18.164 +    msg->from = my_ident;
  18.165 +    msg->to = new_identity_list(to_ident);
  18.166 +    msg->shortmsg = strdup("This is an exciting message from Carol!");
  18.167 +    msg->longmsg = strdup("Not\nVery\nExciting\n");   
  18.168 +    
  18.169 +    message* enc_msg = NULL;
  18.170 +    status = encrypt_message(session, msg, NULL, &enc_msg, PEP_enc_inline, 0);
  18.171 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.172 +    ASSERT_NE(enc_msg, nullptr);
  18.173 +    
  18.174 +    ASSERT_EQ(enc_msg->enc_format, PEP_enc_inline);
  18.175 +    free_message(msg);
  18.176 +    free_message(enc_msg);    
  18.177 +    free_stringlist(found_key);    
  18.178 +}
  18.179 +
  18.180 +
  18.181 +TEST_F(IdentEncFormatTest, check_ident_enc_format_one_to_nospec) {
  18.182 +    ASSERT_TRUE(slurp_and_import_key(session, carol_filename));
  18.183 +    stringlist_t* found_key = NULL;
  18.184 +    PEP_STATUS status = find_keys(session, carol_fpr, &found_key);
  18.185 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.186 +    ASSERT_NE(found_key, nullptr);
  18.187 +    ASSERT_NE(found_key->value, nullptr);
  18.188 +    ASSERT_STREQ(found_key->value, carol_fpr);
  18.189 +    ASSERT_EQ(found_key->next, nullptr);
  18.190 +    
  18.191 +    const char* my_fpr = carol_fpr;
  18.192 +    const char* my_name = "Carol Peril";
  18.193 +    const char* my_address = "carol_peril@darthmama.cool";
  18.194 +    pEp_identity* my_ident = new_identity(my_address, my_fpr, PEP_OWN_USERID, my_name);
  18.195 +    status = set_own_key(session, my_ident, my_fpr);
  18.196 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.197 +    
  18.198 +    // Set up "to"
  18.199 +    ASSERT_TRUE(slurp_and_import_key(session, alice_pub_filename));    
  18.200 +    const char* to_fpr = alice_fpr;
  18.201 +    const char* to_name = "Alice Malice";
  18.202 +    const char* to_address = "alice_malice@darthmama.cool";
  18.203 +    pEp_identity* to_ident = new_identity(to_address, to_fpr, "ALICE", to_name);
  18.204 +    status = set_identity(session, to_ident);
  18.205 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.206 +    
  18.207 +    pEp_identity* to_setter = identity_dup(to_ident);
  18.208 +    status = set_ident_enc_format(session, to_setter, PEP_enc_inline_EA);
  18.209 +    free_identity(to_setter);
  18.210 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.211 +        
  18.212 +    message* msg = new_message(PEP_dir_outgoing);        
  18.213 +    msg->from = my_ident;
  18.214 +    msg->to = new_identity_list(to_ident);
  18.215 +    msg->shortmsg = strdup("This is an exciting message from Carol!");
  18.216 +    msg->longmsg = strdup("Not\nVery\nExciting\n");   
  18.217 +    
  18.218 +    message* enc_msg = NULL;
  18.219 +    status = encrypt_message(session, msg, NULL, &enc_msg, PEP_enc_auto, 0);
  18.220 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.221 +    ASSERT_NE(enc_msg, nullptr);
  18.222 +    
  18.223 +    ASSERT_EQ(enc_msg->enc_format, PEP_enc_inline_EA);
  18.224 +    free_message(msg);
  18.225 +    free_message(enc_msg);    
  18.226 +    free_stringlist(found_key);        
  18.227 +}
  18.228 +
  18.229 +TEST_F(IdentEncFormatTest, check_ident_enc_format_multi_to_middle_nospec) {    
  18.230 +    ASSERT_TRUE(slurp_and_import_key(session, carol_filename));
  18.231 +    stringlist_t* found_key = NULL;
  18.232 +    PEP_STATUS status = find_keys(session, carol_fpr, &found_key);
  18.233 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.234 +    ASSERT_NE(found_key, nullptr);
  18.235 +    ASSERT_NE(found_key->value, nullptr);
  18.236 +    ASSERT_STREQ(found_key->value, carol_fpr);
  18.237 +    ASSERT_EQ(found_key->next, nullptr);
  18.238 +    
  18.239 +    const char* my_fpr = carol_fpr;
  18.240 +    const char* my_name = "Carol Peril";
  18.241 +    const char* my_address = "carol_peril@darthmama.cool";
  18.242 +    pEp_identity* my_ident = new_identity(my_address, my_fpr, PEP_OWN_USERID, my_name);
  18.243 +    status = set_own_key(session, my_ident, my_fpr);
  18.244 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.245 +    
  18.246 +    // Set up "to"
  18.247 +    ASSERT_TRUE(slurp_and_import_key(session, bob_filename));    
  18.248 +    const char* to_fpr = bob_fpr;
  18.249 +    const char* to_name = "Bob Mob";
  18.250 +    const char* to_address = "bob_mob@darthmama.cool";
  18.251 +    pEp_identity* to_ident = new_identity(to_address, to_fpr, "BOB", to_name);
  18.252 +    status = set_identity(session, to_ident);
  18.253 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.254 +    to_ident = NULL;
  18.255 +            
  18.256 +    message* msg = new_message(PEP_dir_outgoing);        
  18.257 +    msg->from = my_ident;
  18.258 +    msg->to = new_identity_list(to_ident);
  18.259 +    msg->shortmsg = strdup("This is an exciting message from Carol!");
  18.260 +    msg->longmsg = strdup("Not\nVery\nExciting\n");   
  18.261 +
  18.262 +    ASSERT_TRUE(slurp_and_import_key(session, alice_pub_filename));    
  18.263 +    to_fpr = alice_fpr;
  18.264 +    to_name = "Alice Malice";
  18.265 +    to_address = "alice_malice@darthmama.cool";    
  18.266 +    to_ident = new_identity(to_address, to_fpr, "ALICE", to_name);
  18.267 +    status = set_identity(session, to_ident);
  18.268 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.269 +    identity_list_add(msg->to, to_ident);
  18.270 +        
  18.271 +    pEp_identity* to_setter = identity_dup(to_ident);
  18.272 +    to_ident = NULL;    
  18.273 +    status = set_ident_enc_format(session, to_setter, PEP_enc_inline);
  18.274 +    free_identity(to_setter);
  18.275 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.276 +        
  18.277 +    ASSERT_TRUE(slurp_and_import_key(session, david_filename));    
  18.278 +    to_fpr = david_fpr;
  18.279 +    to_name = "Dave Rave";
  18.280 +    to_address = "dave_rave@darthmama.cool";
  18.281 +    to_ident = new_identity(to_address, to_fpr, "DAVID", to_name);
  18.282 +    status = set_identity(session, to_ident);
  18.283 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.284 +    identity_list_add(msg->to, to_ident);    
  18.285 +        
  18.286 +    message* enc_msg = NULL;
  18.287 +    status = encrypt_message(session, msg, NULL, &enc_msg, PEP_enc_auto, 0);
  18.288 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.289 +    ASSERT_NE(enc_msg, nullptr);
  18.290 +    
  18.291 +    ASSERT_EQ(enc_msg->enc_format, PEP_enc_inline);
  18.292 +    free_message(msg);
  18.293 +    free_message(enc_msg);    
  18.294 +    free_stringlist(found_key);            
  18.295 +}
  18.296 +
  18.297 +TEST_F(IdentEncFormatTest, check_ident_enc_format_multi_cc_nospec) {
  18.298 +    ASSERT_TRUE(slurp_and_import_key(session, carol_filename));
  18.299 +    stringlist_t* found_key = NULL;
  18.300 +    PEP_STATUS status = find_keys(session, carol_fpr, &found_key);
  18.301 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.302 +    ASSERT_NE(found_key, nullptr);
  18.303 +    ASSERT_NE(found_key->value, nullptr);
  18.304 +    ASSERT_STREQ(found_key->value, carol_fpr);
  18.305 +    ASSERT_EQ(found_key->next, nullptr);
  18.306 +    
  18.307 +    const char* my_fpr = carol_fpr;
  18.308 +    const char* my_name = "Carol Peril";
  18.309 +    const char* my_address = "carol_peril@darthmama.cool";
  18.310 +    pEp_identity* my_ident = new_identity(my_address, my_fpr, PEP_OWN_USERID, my_name);
  18.311 +    status = set_own_key(session, my_ident, my_fpr);
  18.312 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.313 +        
  18.314 +    // Set up "to"
  18.315 +    ASSERT_TRUE(slurp_and_import_key(session, bob_filename));    
  18.316 +    const char* to_fpr = bob_fpr;
  18.317 +    const char* to_name = "Bob Mob";
  18.318 +    const char* to_address = "bob_mob@darthmama.cool";
  18.319 +    pEp_identity* to_ident = new_identity(to_address, to_fpr, "BOB", to_name);
  18.320 +    status = set_identity(session, to_ident);
  18.321 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.322 +            
  18.323 +    message* msg = new_message(PEP_dir_outgoing);        
  18.324 +    msg->from = my_ident;
  18.325 +    msg->to = new_identity_list(to_ident);
  18.326 +    msg->shortmsg = strdup("This is an exciting message from Carol!");
  18.327 +    msg->longmsg = strdup("Not\nVery\nExciting\n");   
  18.328 +
  18.329 +    to_ident = NULL;
  18.330 +
  18.331 +    ASSERT_TRUE(slurp_and_import_key(session, alice_pub_filename));    
  18.332 +    to_fpr = alice_fpr;
  18.333 +    to_name = "Alice Malice";
  18.334 +    to_address = "alice_malice@darthmama.cool";    
  18.335 +    to_ident = new_identity(to_address, to_fpr, "ALICE", to_name);
  18.336 +    status = set_identity(session, to_ident);
  18.337 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.338 +    msg->cc = new_identity_list(to_ident);
  18.339 +        
  18.340 +    pEp_identity* to_setter = identity_dup(to_ident);
  18.341 +    to_ident = NULL;    
  18.342 +    status = set_ident_enc_format(session, to_setter, PEP_enc_inline_EA);
  18.343 +    free_identity(to_setter);
  18.344 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.345 +        
  18.346 +    ASSERT_TRUE(slurp_and_import_key(session, david_filename));    
  18.347 +    to_fpr = david_fpr;
  18.348 +    to_name = "Dave Rave";
  18.349 +    to_address = "dave_rave@darthmama.cool";
  18.350 +    to_ident = new_identity(to_address, to_fpr, "DAVID", to_name);
  18.351 +    status = set_identity(session, to_ident);
  18.352 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.353 +    identity_list_add(msg->cc, to_ident);    
  18.354 +
  18.355 +    to_setter = identity_dup(to_ident);
  18.356 +    to_ident = NULL;    
  18.357 +    status = set_ident_enc_format(session, to_setter, PEP_enc_S_MIME);
  18.358 +    free_identity(to_setter);
  18.359 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.360 +            
  18.361 +    message* enc_msg = NULL;
  18.362 +    status = encrypt_message(session, msg, NULL, &enc_msg, PEP_enc_auto, 0);
  18.363 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.364 +    ASSERT_NE(enc_msg, nullptr);
  18.365 +    
  18.366 +    ASSERT_EQ(enc_msg->enc_format, PEP_enc_inline_EA);
  18.367 +    free_message(msg);
  18.368 +    free_message(enc_msg);    
  18.369 +    free_stringlist(found_key);                
  18.370 +}
  18.371 +
  18.372 +TEST_F(IdentEncFormatTest, check_ident_enc_format_multi_bcc_nospec) {
  18.373 +    ASSERT_TRUE(slurp_and_import_key(session, carol_filename));
  18.374 +    stringlist_t* found_key = NULL;
  18.375 +    PEP_STATUS status = find_keys(session, carol_fpr, &found_key);
  18.376 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.377 +    ASSERT_NE(found_key, nullptr);
  18.378 +    ASSERT_NE(found_key->value, nullptr);
  18.379 +    ASSERT_STREQ(found_key->value, carol_fpr);
  18.380 +    ASSERT_EQ(found_key->next, nullptr);
  18.381 +    
  18.382 +    const char* my_fpr = carol_fpr;
  18.383 +    const char* my_name = "Carol Peril";
  18.384 +    const char* my_address = "carol_peril@darthmama.cool";
  18.385 +    pEp_identity* my_ident = new_identity(my_address, my_fpr, PEP_OWN_USERID, my_name);
  18.386 +    status = set_own_key(session, my_ident, my_fpr);
  18.387 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.388 +        
  18.389 +    // Set up "to"
  18.390 +    ASSERT_TRUE(slurp_and_import_key(session, bob_filename));    
  18.391 +    const char* to_fpr = bob_fpr;
  18.392 +    const char* to_name = "Bob Mob";
  18.393 +    const char* to_address = "bob_mob@darthmama.cool";
  18.394 +    pEp_identity* to_ident = new_identity(to_address, to_fpr, "BOB", to_name);
  18.395 +    status = set_identity(session, to_ident);
  18.396 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.397 +            
  18.398 +    message* msg = new_message(PEP_dir_outgoing);        
  18.399 +    msg->from = my_ident;
  18.400 +    msg->bcc = new_identity_list(to_ident);
  18.401 +    msg->shortmsg = strdup("This is an exciting message from Carol!");
  18.402 +    msg->longmsg = strdup("Not\nVery\nExciting\n");   
  18.403 +            
  18.404 +    pEp_identity* to_setter = identity_dup(to_ident);
  18.405 +    to_ident = NULL;    
  18.406 +    status = set_ident_enc_format(session, to_setter, PEP_enc_inline_EA);
  18.407 +    free_identity(to_setter);
  18.408 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.409 +                    
  18.410 +    message* enc_msg = NULL;
  18.411 +    status = encrypt_message(session, msg, NULL, &enc_msg, PEP_enc_auto, 0);
  18.412 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.413 +    ASSERT_NE(enc_msg, nullptr);
  18.414 +    
  18.415 +    ASSERT_EQ(enc_msg->enc_format, PEP_enc_inline_EA);
  18.416 +    free_message(msg);
  18.417 +    free_message(enc_msg);    
  18.418 +    free_stringlist(found_key);                
  18.419 +}
  18.420 +
  18.421 +TEST_F(IdentEncFormatTest, check_ident_enc_format_multi_cc_specified) {
  18.422 +    ASSERT_TRUE(slurp_and_import_key(session, carol_filename));
  18.423 +    stringlist_t* found_key = NULL;
  18.424 +    PEP_STATUS status = find_keys(session, carol_fpr, &found_key);
  18.425 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.426 +    ASSERT_NE(found_key, nullptr);
  18.427 +    ASSERT_NE(found_key->value, nullptr);
  18.428 +    ASSERT_STREQ(found_key->value, carol_fpr);
  18.429 +    ASSERT_EQ(found_key->next, nullptr);
  18.430 +    
  18.431 +    const char* my_fpr = carol_fpr;
  18.432 +    const char* my_name = "Carol Peril";
  18.433 +    const char* my_address = "carol_peril@darthmama.cool";
  18.434 +    pEp_identity* my_ident = new_identity(my_address, my_fpr, PEP_OWN_USERID, my_name);
  18.435 +    status = set_own_key(session, my_ident, my_fpr);
  18.436 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.437 +        
  18.438 +    // Set up "to"
  18.439 +    ASSERT_TRUE(slurp_and_import_key(session, bob_filename));    
  18.440 +    const char* to_fpr = bob_fpr;
  18.441 +    const char* to_name = "Bob Mob";
  18.442 +    const char* to_address = "bob_mob@darthmama.cool";
  18.443 +    pEp_identity* to_ident = new_identity(to_address, to_fpr, "BOB", to_name);
  18.444 +    status = set_identity(session, to_ident);
  18.445 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.446 +            
  18.447 +    message* msg = new_message(PEP_dir_outgoing);        
  18.448 +    msg->from = my_ident;
  18.449 +    msg->to = new_identity_list(to_ident);
  18.450 +    msg->shortmsg = strdup("This is an exciting message from Carol!");
  18.451 +    msg->longmsg = strdup("Not\nVery\nExciting\n");   
  18.452 +
  18.453 +    to_ident = NULL;
  18.454 +
  18.455 +    ASSERT_TRUE(slurp_and_import_key(session, alice_pub_filename));    
  18.456 +    to_fpr = alice_fpr;
  18.457 +    to_name = "Alice Malice";
  18.458 +    to_address = "alice_malice@darthmama.cool";    
  18.459 +    to_ident = new_identity(to_address, to_fpr, "ALICE", to_name);
  18.460 +    status = set_identity(session, to_ident);
  18.461 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.462 +    msg->cc = new_identity_list(to_ident);
  18.463 +        
  18.464 +    pEp_identity* to_setter = identity_dup(to_ident);
  18.465 +    to_ident = NULL;    
  18.466 +    status = set_ident_enc_format(session, to_setter, PEP_enc_PGP_MIME);
  18.467 +    free_identity(to_setter);
  18.468 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.469 +        
  18.470 +    ASSERT_TRUE(slurp_and_import_key(session, david_filename));    
  18.471 +    to_fpr = david_fpr;
  18.472 +    to_name = "Dave Rave";
  18.473 +    to_address = "dave_rave@darthmama.cool";
  18.474 +    to_ident = new_identity(to_address, to_fpr, "DAVID", to_name);
  18.475 +    status = set_identity(session, to_ident);
  18.476 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.477 +    identity_list_add(msg->cc, to_ident);    
  18.478 +
  18.479 +    to_setter = identity_dup(to_ident);
  18.480 +    to_ident = NULL;    
  18.481 +    status = set_ident_enc_format(session, to_setter, PEP_enc_S_MIME);
  18.482 +    free_identity(to_setter);
  18.483 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.484 +            
  18.485 +    message* enc_msg = NULL;
  18.486 +    status = encrypt_message(session, msg, NULL, &enc_msg, PEP_enc_inline_EA, 0);
  18.487 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.488 +    ASSERT_NE(enc_msg, nullptr);
  18.489 +    
  18.490 +    ASSERT_EQ(enc_msg->enc_format, PEP_enc_inline_EA);
  18.491 +    free_message(msg);
  18.492 +    free_message(enc_msg);    
  18.493 +    free_stringlist(found_key);      
  18.494 +    
  18.495 +    to_name = "Alice Malice";
  18.496 +    to_address = "alice_malice@darthmama.cool";    
  18.497 +    to_ident = new_identity(to_address, NULL, "ALICE", to_name);
  18.498 +    status = update_identity(session, to_ident);
  18.499 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.500 +    ASSERT_EQ(to_ident->enc_format, PEP_enc_inline_EA);
  18.501 +    free_identity(to_ident);
  18.502 +
  18.503 +    to_fpr = bob_fpr;
  18.504 +    to_address = "bob_mob@darthmama.cool";
  18.505 +    to_ident = new_identity(to_address, NULL, "BOB", NULL);    
  18.506 +    status = update_identity(session, to_ident);
  18.507 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.508 +    ASSERT_EQ(to_ident->enc_format, PEP_enc_inline_EA);
  18.509 +    free_identity(to_ident);
  18.510 +        
  18.511 +    to_address = "dave_rave@darthmama.cool";    
  18.512 +    to_ident = new_identity(to_address, NULL, NULL, NULL);
  18.513 +    status = update_identity(session, to_ident);
  18.514 +    ASSERT_EQ(status, PEP_STATUS_OK);
  18.515 +    ASSERT_EQ(to_ident->enc_format, PEP_enc_inline_EA);
  18.516 +    free_identity(to_ident);    
  18.517 +}
    19.1 --- a/test/src/ImportKeyTest.cc	Tue Jun 30 14:56:25 2020 +0200
    19.2 +++ b/test/src/ImportKeyTest.cc	Mon Jul 13 13:41:27 2020 +0200
    19.3 @@ -326,3 +326,31 @@
    19.4      ASSERT_EQ(changes, 0xEABFF); // (938 << 10 | 1023) -> 11101010101111111111 = 0xEABFF
    19.5      free_stringlist(keylist);    
    19.6  }
    19.7 +
    19.8 +TEST_F(ImportKeyTest, check_770_import_priv_asc) {
    19.9 +    PEP_STATUS status = PEP_STATUS_OK;
   19.10 +
   19.11 +    string pubkey = slurp("test_keys/770_priv.asc");
   19.12 +    stringlist_t* keylist = NULL;
   19.13 +    status = _import_key_with_fpr_return(session, pubkey.c_str(), pubkey.size(), NULL, &keylist, NULL);
   19.14 +    ASSERT_EQ(status, PEP_KEY_IMPORTED);
   19.15 +    ASSERT_NE(keylist, nullptr);
   19.16 +    ASSERT_STREQ(keylist->value, "0521111E12084FDEA58A38E880D9FB378DCC789D");
   19.17 +    ASSERT_EQ(keylist->next, nullptr);
   19.18 +
   19.19 +    // FIXME, check key is actually imported
   19.20 +}
   19.21 +
   19.22 +TEST_F(ImportKeyTest, check_770_import_priv_pgp) {
   19.23 +    PEP_STATUS status = PEP_STATUS_OK;
   19.24 +
   19.25 +    string pubkey = slurp("test_keys/770_priv.pgp");
   19.26 +    stringlist_t* keylist = NULL;
   19.27 +    status = _import_key_with_fpr_return(session, pubkey.c_str(), pubkey.size(), NULL, &keylist, NULL);
   19.28 +    ASSERT_EQ(status, PEP_KEY_IMPORTED);
   19.29 +    ASSERT_NE(keylist, nullptr);
   19.30 +    ASSERT_STREQ(keylist->value, "0521111E12084FDEA58A38E880D9FB378DCC789D");
   19.31 +    ASSERT_EQ(keylist->next, nullptr);
   19.32 +
   19.33 +    // FIXME, check key is actually imported
   19.34 +}
    20.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    20.2 +++ b/test/test_keys/770_priv.asc	Mon Jul 13 13:41:27 2020 +0200
    20.3 @@ -0,0 +1,60 @@
    20.4 +-----BEGIN PGP PRIVATE KEY BLOCK-----
    20.5 +
    20.6 +lQPGBF8BfrABCACkJOcCxWjVk/ouBCz6RnSF7sZLZ8PAZTMQT9vJtboL6N2xR+7B
    20.7 +/SAzfTMcv+oU5A3Kd/k9dGA/p4wS3gXxkKaaUza1tjpWTDl92hVpxwOp7ZYczg1O
    20.8 +rB6EWhG1dcANrh/hy6wt/AWK39L0GANHsRweqC54EXJ+xCTLUT5CODFaelrGKE4b
    20.9 +TFRlk7NSTuRoqHRsS5Ax34L+RDC8orl/SAoqRFVe3UP+HLw5ODwIebgKKzzSTFHc
   20.10 +e7q5d/mJKsA2SPOoHi23numleBFknBKtfp6As0/07GRFFCb/W3xS8mSy6lBbgcly
   20.11 +k8ovPvm82PBBLiEDjdIB6FRLayBLnAr89i45ABEBAAH+BwMCcE+AMYzTIEDrgL5s
   20.12 +HZGhl2O4EDEs1Aq2FfYL4TYXS/PpHVOUnIYZYTIHKiR/O9prH8fn6M0TH1yAVgyD
   20.13 +BjQC9c0dnq4QkaHldhqZARWajC3O/bPJ2KU80KRdoFGS3qoc9JXY4hgPQVPAoWkY
   20.14 +zFJgJvU47W19tYU9M4WNjbxB8w14VjRVhSA3HiOiMM5uNCn0yrhs9bWInPKQB4IQ
   20.15 +x8Lvx/HDUYHS2QWh1LXiDy+Pbe8Vvji10LcqTTQaHvUKVM1Et/oDCUm9gLSdc+nE
   20.16 +uGYj7QmD+RhCny/vwhfZhM5DCEQm/wd1q8QGrRvTv0LEOoOVc2kwc7ro7YXBvIq2
   20.17 +cDK6bxMKdWq9maMk1FGD5iT3J2KuEYmvnl0zRQqTq/rk2gGmMULhbHs/UgE80c9U
   20.18 +4gnzI75rrlewpf0MBVXj6QnAy0sBxJQ65b3F3dYvBb0DmnoQIZCV2Zf3UY0E1HtB
   20.19 +4I+H/8rjNtD2fW/O2EoCbXMkbw0xxhMRsm//2Kfu4G0oOIsvAcgFDhQSvPjauht7
   20.20 +H6e3DQHuVTyathbmlqEeS8GkjKWgx2/RtdfH1D9yILDrx+YGuCyWlW+9ruZVNe54
   20.21 +WVtx5IZ0s5n6N9eLUzjfd4tdQorwznlAy93/f/LQ3VPyBPzIkE9fmhnMWVSIjRkd
   20.22 +cyhoD7GxDLQFaNGCrjhLkiur8w9WTDa1VgrIfIeGwhI/e0Q1+xalDV7bYFDa5Qda
   20.23 +3i6mTQLM1bn6t/Hkhs1Rn8xV3Ox/etVw78hdTulUDyMLunDIgBI0iHYEwcIwMXsD
   20.24 +VPec10R8MJUMETS/gC24wpTjHd/CITvutX4UNhfDH88iYHsssioDLpiQAcaw98Yg
   20.25 +pr+9ToKQ/GS5Ff1oT8/NakjlBDouEahtOEEwgbN1EFm4PxqSApcjory6NydNcNSg
   20.26 +mJq0KqBpkUxUtCtUaHVuZGVyIEJpcmQgVGVzdGluZ2VyIDx0YnRlc3RAZGluZ2Vu
   20.27 +cy5vcmc+iQFUBBMBCAA+FiEEBSERHhIIT96lijjogNn7N43MeJ0FAl8BfrACGwMF
   20.28 +CQPCZwAFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQgNn7N43MeJ1kmgf9FB3O
   20.29 +ELJhGgrzR7b/io1QWoWQclnKBmn3gK2YJvHFJWVfMg4R+QBQgwPu32E84s/A0al2
   20.30 +5FEwajM++uaaGjZ6x6rSGnOrmDPi3IFpuwefgTwKXqwHJoZjdDivfI5Fy46qL4hU
   20.31 +jhwiDtbKgZ+qw5gb4teUbkdlB5INj1kgSJC/Hxr6WuygsGl/QhdiXNpSxZxnmkwB
   20.32 +Wi7Aymd1x7ur++UEOVxEEp/N2rFHGsbEgh7hwL4cxEfhZLcxJv8p8i3EwfEvChjE
   20.33 +5yL3/j3gmlD/Q00/XE++kuHKJWASDf7wOA/WZovoeM+cBKUmvOKgME6eHpS/fLHS
   20.34 +ABrxdDzsLpUPFaTozJ0DxgRfAX6wAQgAtX0xtABFtHNSnt1mKZiKngnb6lMVDtDQ
   20.35 +kZA3MYG1SCjkezry6dJYVGip8Px4XvLT4jj7qmjN0eQYEqK4P8ufw3zGFk4R4E43
   20.36 +qa9aroW2X9A43Wv+D4nM9SDzURdJW4mX0WnC+hu7V4BF8esxagnHMlfVVt1jFwW5
   20.37 +6HgSDS+aAznFNRfhhO1zB8R8bJEDgmdJFnegSFMJlD0VqdWRCz5rBqKHddbMOppm
   20.38 +XnXwOTiGZuxg7KYByjMsp9XmFIs8+BFXUg141m0laUw2ezpdBRlLQaio6UvTRV8v
   20.39 +CSmYNbm8bk/qKM9SXrr4HYgrPdZ8V3tKfGGbLjlo/Ih1sag5T2qlJwARAQAB/gcD
   20.40 +ArhphXys3eD760Yf4PslFNwJSlWiuO4mao5Vg1x+/a8nqb2Qr+J+/6m43yYMZnSm
   20.41 +MIUqCbm+LBdAmbF+z8cAe1KWl3srx5UljFmlit9w7pdFXS8P8gPj+VsXpZT2kafq
   20.42 +DC5LzPvQALY6umHUAPUP3lMlB0P02GW1bS3nzAw6yPydYQ+OVHowZd/Tkf9l17YD
   20.43 +RArp7GM2itARq74jThj3QmujisTBgx7r/IxLB018rqjnpYw8G5eOezGX75a9WmUD
   20.44 +z8M9H6rKxZONQQf/I4Udn6pZfaPVeLNqFrIRsNxwcxEfrA4IthV0wggPbCGH2lzr
   20.45 +Qfy4yz5LJmdM6wpZvcV7xiSo67WI1qteUNxgY0LtY2fXN40C2scyb/XloUGzQap9
   20.46 +B35wuAzwPOenQlPOlEQZf/kb54714BsO198dzNGuwEzDsQbtNC4iiFAU3R6PVd8G
   20.47 +COQjKhGiGwwjtjaNCHLoPwABkj1jjGCin1wfIp9zDFEzh9hImQPcIAEgv25U1Ppt
   20.48 +cuhVsE15qpnVk3l1IKgy7/f8XHFA+aKPG9ltXMyGZ8FbyqloW4kUYIaChadKo1JZ
   20.49 ++PXhrme4DhDxMOJVIwUiIIzccUcphtGGYv0Ci5CA65ewkA+6HpgwcntvTJ41SMR1
   20.50 +PdXmI5AH33nmvHUPRyRjGAOWGAWGuQCfmSXvaOY1RG6OIZLFkwcHLeSDd7eqGyZU
   20.51 +mYR27OdaG9WfoK4rWsq+rLKnmrnSR5YoIVLO2wr5hZATjIQGazF3JQzHB8YI0Vk9
   20.52 +i/nbIseVO1+TS1SdB5dn4GA9Xlo2brxNkncXtWBR6raW1EFsEf3r8HLXvhNBT8Sh
   20.53 +nNBWXPiwUYMK+ZH0FufDk33o6jXI8Z3KxDp+rVoSDR5kK6rdQk3Q6u9v6aCN3J+X
   20.54 +QNgFrHmaHZRzC8AZQXS39ZAjUrZMPYkBPAQYAQgAJhYhBAUhER4SCE/epYo46IDZ
   20.55 ++zeNzHidBQJfAX6wAhsMBQkDwmcAAAoJEIDZ+zeNzHidlO4H/1Krf9bHbccbNyCq
   20.56 +13o6HE0TmgP7cibaOF+lP7qUIDlttdj+tIuduqaNkZAW07WSiL86wMiSgvxspC8h
   20.57 +Nmdp1QywC9cdM/1rzbZNI7klLi7lhQAgK+YOs9kY3Un85M0xrup453X1FDfWHlCg
   20.58 +JZz/wqqV8TCkX6gJ1/qm4+7prRJvYlI/4zo87s7WzCyOzHB6JR5Tg2+mY6PwrbJI
   20.59 +d+deP0TEcRZZj52PJYV7/E7Nf83Evk66Kb021WSq5uvJGdoRysGlQY0cg9owIZEU
   20.60 +ApVsG4gY1V3lPqTLOQfoJIEHLAHqtia3Al+tVx0iCRgxvX632j3PLvKvu5uEB3xH
   20.61 +OfvivGE=
   20.62 +=uvnV
   20.63 +-----END PGP PRIVATE KEY BLOCK-----
    21.1 Binary file test/test_keys/770_priv.pgp has changed