crypt32: Implement CryptMsgSignCTL.
authorJuan Lang <juan.lang@gmail.com>
Mon, 5 Jan 2009 21:34:57 +0000 (13:34 -0800)
committerAlexandre Julliard <julliard@winehq.org>
Tue, 6 Jan 2009 11:43:15 +0000 (12:43 +0100)
dlls/crypt32/msg.c

index 14140c2b6971b5153b4cca385c240cabceb2c29d..874f393de4727504d1c0e6975645821b00531acb 100644 (file)
@@ -2927,7 +2927,29 @@ BOOL WINAPI CryptMsgSignCTL(DWORD dwMsgEncodingType, BYTE *pbCtlContent,
  DWORD cbCtlContent, PCMSG_SIGNED_ENCODE_INFO pSignInfo, DWORD dwFlags,
  BYTE *pbEncoded, DWORD *pcbEncoded)
 {
-    FIXME("(%08x, %p, %d, %p, %08x, %p, %p): stub\n", dwMsgEncodingType,
+    static char oid_ctl[] = szOID_CTL;
+    BOOL ret;
+    HCRYPTMSG msg;
+
+    TRACE("(%08x, %p, %d, %p, %08x, %p, %p)\n", dwMsgEncodingType,
      pbCtlContent, cbCtlContent, pSignInfo, dwFlags, pbEncoded, pcbEncoded);
-    return FALSE;
+
+    if (dwFlags)
+    {
+        FIXME("unimplemented for flags %08x\n", dwFlags);
+        return FALSE;
+    }
+    msg = CryptMsgOpenToEncode(dwMsgEncodingType, 0, CMSG_SIGNED, pSignInfo,
+     oid_ctl, NULL);
+    if (msg)
+    {
+        ret = CryptMsgUpdate(msg, pbCtlContent, cbCtlContent, TRUE);
+        if (ret)
+            ret = CryptMsgGetParam(msg, CMSG_CONTENT_PARAM, 0, pbEncoded,
+             pcbEncoded);
+        CryptMsgClose(msg);
+    }
+    else
+        ret = FALSE;
+    return ret;
 }