summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--protocols/WhatsApp/WhatsApp_10.vcxproj6
-rw-r--r--protocols/WhatsApp/WhatsApp_10.vcxproj.filters3
-rw-r--r--protocols/WhatsApp/WhatsApp_11.vcxproj6
-rw-r--r--protocols/WhatsApp/WhatsApp_11.vcxproj.filters3
-rw-r--r--protocols/WhatsApp/src/OpenSSL/evp.h6
-rw-r--r--protocols/WhatsApp/src/OpenSSL/m_sha1.c17
-rw-r--r--protocols/WhatsApp/src/OpenSSL/rsa_sign.c75
7 files changed, 114 insertions, 2 deletions
diff --git a/protocols/WhatsApp/WhatsApp_10.vcxproj b/protocols/WhatsApp/WhatsApp_10.vcxproj
index d70784fff2..96b7bb2f50 100644
--- a/protocols/WhatsApp/WhatsApp_10.vcxproj
+++ b/protocols/WhatsApp/WhatsApp_10.vcxproj
@@ -202,6 +202,12 @@
<ClCompile Include="src\OpenSSL\rc4_skey.c">
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
+ <ClCompile Include="src\OpenSSL\rsa_sign.c">
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
+ </ClCompile>
<ClCompile Include="src\proto.cpp" />
<ClCompile Include="src\stdafx.cpp">
<PrecompiledHeader>Create</PrecompiledHeader>
diff --git a/protocols/WhatsApp/WhatsApp_10.vcxproj.filters b/protocols/WhatsApp/WhatsApp_10.vcxproj.filters
index cf9252c7f1..a82a221122 100644
--- a/protocols/WhatsApp/WhatsApp_10.vcxproj.filters
+++ b/protocols/WhatsApp/WhatsApp_10.vcxproj.filters
@@ -116,6 +116,9 @@
<ClCompile Include="src\OpenSSL\m_sha1.c">
<Filter>WhatsAPI++\OpenSSL</Filter>
</ClCompile>
+ <ClCompile Include="src\OpenSSL\rsa_sign.c">
+ <Filter>WhatsAPI++\OpenSSL</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="src\cJSON.h">
diff --git a/protocols/WhatsApp/WhatsApp_11.vcxproj b/protocols/WhatsApp/WhatsApp_11.vcxproj
index edcea1df0b..fc1a62184f 100644
--- a/protocols/WhatsApp/WhatsApp_11.vcxproj
+++ b/protocols/WhatsApp/WhatsApp_11.vcxproj
@@ -204,6 +204,12 @@
<ClCompile Include="src\OpenSSL\rc4_skey.c">
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
+ <ClCompile Include="src\OpenSSL\rsa_sign.c">
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
+ </ClCompile>
<ClCompile Include="src\proto.cpp" />
<ClCompile Include="src\stdafx.cpp">
<PrecompiledHeader>Create</PrecompiledHeader>
diff --git a/protocols/WhatsApp/WhatsApp_11.vcxproj.filters b/protocols/WhatsApp/WhatsApp_11.vcxproj.filters
index cf9252c7f1..a82a221122 100644
--- a/protocols/WhatsApp/WhatsApp_11.vcxproj.filters
+++ b/protocols/WhatsApp/WhatsApp_11.vcxproj.filters
@@ -116,6 +116,9 @@
<ClCompile Include="src\OpenSSL\m_sha1.c">
<Filter>WhatsAPI++\OpenSSL</Filter>
</ClCompile>
+ <ClCompile Include="src\OpenSSL\rsa_sign.c">
+ <Filter>WhatsAPI++\OpenSSL</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="src\cJSON.h">
diff --git a/protocols/WhatsApp/src/OpenSSL/evp.h b/protocols/WhatsApp/src/OpenSSL/evp.h
index 077cca7d09..bee216913d 100644
--- a/protocols/WhatsApp/src/OpenSSL/evp.h
+++ b/protocols/WhatsApp/src/OpenSSL/evp.h
@@ -193,6 +193,12 @@ struct env_md_st
int ctx_size; /* how big does the ctx->md_data need to be */
} /* EVP_MD */;
+typedef int evp_sign_method(int type,const unsigned char *m,
+ unsigned int m_length,unsigned char *sigret,
+ unsigned int *siglen, void *key);
+typedef int evp_verify_method(int type,const unsigned char *m,
+ unsigned int m_length,const unsigned char *sigbuf,
+ unsigned int siglen, void *key);
int EVP_MD_block_size(const EVP_MD *md);
int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, void *impl);
diff --git a/protocols/WhatsApp/src/OpenSSL/m_sha1.c b/protocols/WhatsApp/src/OpenSSL/m_sha1.c
index e6fc768cc2..c78fe11a77 100644
--- a/protocols/WhatsApp/src/OpenSSL/m_sha1.c
+++ b/protocols/WhatsApp/src/OpenSSL/m_sha1.c
@@ -71,6 +71,8 @@
#define SHA_LAST_BLOCK (SHA_CBLOCK-8)
#define SHA_DIGEST_LENGTH 20
+#define NID_rsaEncryption 6
+#define NID_rsa 19
#define NID_sha1 64
#define NID_sha1WithRSAEncryption 65
@@ -84,6 +86,17 @@ typedef struct SHAstate_st
#include "sha_locl.h"
+/* The following 2 functions sign and verify a X509_SIG ASN1 object
+ * inside PKCS#1 padded RSA encryption */
+int RSA_sign(int type, const unsigned char *m, unsigned int m_length,
+ unsigned char *sigret, unsigned int *siglen, void *rsa);
+int RSA_verify(int type, const unsigned char *m, unsigned int m_length,
+ unsigned char *sigbuf, unsigned int siglen, void *rsa);
+
+#define EVP_PKEY_RSA_method (evp_sign_method *)RSA_sign, \
+ (evp_verify_method *)RSA_verify, \
+ {EVP_PKEY_RSA,EVP_PKEY_RSA2,0,0}
+
static int init(EVP_MD_CTX *ctx)
{ return SHA1_Init(ctx->md_data); }
@@ -93,7 +106,7 @@ static int update(EVP_MD_CTX *ctx,const void *data,size_t count)
static int final(EVP_MD_CTX *ctx,unsigned char *md)
{ return SHA1_Final(md,ctx->md_data); }
-static const EVP_MD sha1_md=
+static const EVP_MD sha1_md =
{
NID_sha1,
NID_sha1WithRSAEncryption,
@@ -104,7 +117,7 @@ static const EVP_MD sha1_md=
final,
NULL,
NULL,
- NULL,
+ EVP_PKEY_RSA_method,
SHA_CBLOCK,
sizeof(EVP_MD *)+sizeof(SHA_CTX),
};
diff --git a/protocols/WhatsApp/src/OpenSSL/rsa_sign.c b/protocols/WhatsApp/src/OpenSSL/rsa_sign.c
new file mode 100644
index 0000000000..1611834466
--- /dev/null
+++ b/protocols/WhatsApp/src/OpenSSL/rsa_sign.c
@@ -0,0 +1,75 @@
+/* crypto/rsa/rsa_sign.c */
+/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
+ * All rights reserved.
+ *
+ * This package is an SSL implementation written
+ * by Eric Young (eay@cryptsoft.com).
+ * The implementation was written so as to conform with Netscapes SSL.
+ *
+ * This library is free for commercial and non-commercial use as long as
+ * the following conditions are aheared to. The following conditions
+ * apply to all code found in this distribution, be it the RC4, RSA,
+ * lhash, DES, etc., code; not just the SSL code. The SSL documentation
+ * included with this distribution is covered by the same copyright terms
+ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
+ *
+ * Copyright remains Eric Young's, and as such any Copyright notices in
+ * the code are not to be removed.
+ * If this package is used in a product, Eric Young should be given attribution
+ * as the author of the parts of the library used.
+ * This can be in the form of a textual message at program startup or
+ * in documentation (online or textual) provided with the package.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * "This product includes cryptographic software written by
+ * Eric Young (eay@cryptsoft.com)"
+ * The word 'cryptographic' can be left out if the rouines from the library
+ * being used are not cryptographic related :-).
+ * 4. If you include any Windows specific code (or a derivative thereof) from
+ * the apps directory (application code) you must include an acknowledgement:
+ * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * The licence and distribution terms for any publically available version or
+ * derivative of this code cannot be changed. i.e. this code cannot simply be
+ * copied and put under another distribution licence
+ * [including the GNU Public Licence.]
+ */
+
+#include <stdio.h>
+
+/* Size of an SSL signature: MD5+SHA1 */
+#define SSL_SIG_LENGTH 36
+
+int RSA_sign(int type, const unsigned char *m, unsigned int m_len,
+ unsigned char *sigret, unsigned int *siglen, void *rsa)
+{
+ return(0);
+}
+
+int RSA_verify(int dtype, const unsigned char *m, unsigned int m_len,
+ unsigned char *sigbuf, unsigned int siglen, void *rsa)
+{
+ return(0);
+}
+