29 #include "ms_example.h" 30 #include <seclabel_api.h> 32 #define XML_BUFSIZE 1024 34 int num_unsigned_rcvd;
35 int num_unverified_rcvd;
36 int num_verified_rcvd;
37 int num_messages_rcvd ;
38 int num_reports_rcvd ;
41 static char *optstr =
"u37m:d:p:w:M:D:P:W:e:b:x:EY:U:I";
43 static void usage(
void);
47 struct X400msSession *sp
50 static void setup_default_new_sec_env(
51 struct X400msSession *sp,
52 char *sec_trusted_cert_dir
55 static void setup_default_old_sec_env(
56 struct X400msSession *sp,
62 static void report_msg_token_info(
63 struct X400Recipient *rp
66 static int get_sec_label(
67 struct X400msMessage *mp
70 static void print_sec_label(
71 unsigned char slab_buffer[],
76 struct X400Recipient *rp
79 static void show_certificate (
80 struct X400Recipient *rp,
85 static int handle_ipn(
86 struct X400msMessage *mp
89 static int handle_msg(
90 struct X400msSession *sp,
91 struct X400msMessage *mp
95 struct X400msSession *sp,
96 struct X400msMessage *mp,
97 struct X400msMessage **ipn
100 static int do_report(
101 struct X400msSession *sp,
102 struct X400msMessage *mp
118 struct X400msSession *sp;
124 if (get_args(argc, argv, optstr)) {
129 printf(
"Connection type (0 = P7, 1 = P3 submit only, 2 = P3 both directions) [%d]: ", x400_contype);
130 contype = ic_fgetc(x400_contype, stdin);
132 ic_fgetc(x400_contype, stdin);
134 if ( contype <
'0' ||
'2' < contype )
135 contype = x400_contype;
140 def_oraddr = x400_ms_user_addr;
141 def_dn = x400_ms_user_dn;
142 def_pa = x400_ms_presentation_address;
145 def_oraddr = x400_mta_user_addr;
146 def_dn = x400_mta_user_dn;
147 def_pa = x400_mta_presentation_address;
150 printf(
"Your ORAddress [%s] > ", def_oraddr);
151 ic_fgets(orn,
sizeof orn, stdin);
153 if (orn[strlen(orn) - 1] ==
'\n')
154 orn[strlen(orn) - 1] =
'\0';
157 strcpy(orn, def_oraddr);
160 printf(
"Password [%s]: ",
161 contype == 0 ? x400_p7_password : x400_p3_password);
162 if (ic_fgets(buffer,
sizeof buffer, stdin) == NULL)
165 if (buffer[strlen(buffer) - 1] ==
'\n')
166 buffer[strlen(buffer) - 1] =
'\0';
167 if (buffer[0] ==
'\0')
168 strcpy(buffer, contype == 0 ? x400_p7_password : x400_p3_password);
170 printf(
"Presentation Address [%s] > ", def_pa);
171 ic_fgets(pa,
sizeof pa, stdin);
173 if (pa[strlen(pa) - 1] ==
'\n')
174 pa[strlen(pa) - 1] =
'\0';
179 status =
X400msOpen(contype, orn, def_dn, buffer, pa, &nummsg, &sp);
181 fprintf(stderr,
"Error in Open: %s\n",
X400msError(status));
189 printf (
"no messages - waiting for a message to be delivered.....\n");
192 printf(
"%d messages waiting\n", nummsg);
195 status = get_msg(sp);
197 fprintf(stderr,
"Error in getting msg: %s\n",
201 fprintf(stderr,
"got first\n");
204 fprintf(stderr,
"================================================\n");
205 status = get_msg(sp);
207 fprintf(stderr,
"Error in getting msg: %s\n",
211 }
while (until_no_more_msgs);
214 printf(
"%d num_messages_rcvd\n", num_messages_rcvd);
215 printf(
"%d num_reports_rcvd\n", num_reports_rcvd);
216 printf(
"%d num_unsigned_rcvd\n", num_unsigned_rcvd);
217 printf(
"%d num_unverified_rcvd\n", num_unverified_rcvd);
218 printf(
"%d num_verified_rcvd\n", num_verified_rcvd);
219 printf(
"%d num_ipns_rcvd\n", num_ipns_rcvd);
225 struct X400msSession *sp
232 struct X400msMessage *mp;
235 printf(
"Waiting for new messages for 10 seconds\n");
238 fprintf(stderr,
"Error from Wait: %s\n",
X400msError(status));
241 printf(
"%d num_messagese_rcvd\n", num_messages_rcvd);
242 printf(
"%d num_reports_rcvd\n", num_reports_rcvd);
243 printf(
"%d num_unsigned_rcvd\n", num_unsigned_rcvd);
244 printf(
"%d num_unverified_rcvd\n", num_unverified_rcvd);
245 printf(
"%d num_verified_rcvd\n", num_verified_rcvd);
262 if (use_new_sec_env) {
263 setup_default_new_sec_env(sp, trusted_ca_certs_dir);
265 setup_default_old_sec_env(sp, security_id, identity_dn, passphrase);
275 printf(
"Getting message\n");
280 fprintf(stderr,
"MsgGet successfully got message\n");
283 fprintf(stderr,
"Error from MsgGet: %s\n",
X400msError(status));
294 status = do_report(sp, mp);
304 fprintf(stderr,
"Error from MsgGetIntParam: %s\n",
307 printf(
"Type of Message: %d\n", intparam);
312 printf(
"Received an IPN\n");
317 printf(
"not an IPN\n");
318 num_messages_rcvd++ ;
319 status = handle_msg(sp, mp);
321 fprintf(stderr,
"Error from handle_msg: %s\n",
326 struct X400msMessage *ipn;
327 status = send_ipn(sp, mp, &ipn);
329 fprintf(stderr,
"Error from send_ipn: %s\n",
335 fprintf(stderr,
"Error from X400msMsgDelete (IPN)%s\n",
341 fprintf(stderr,
"Error from X400msMsgDelete (IPN)%s\n",
349 fprintf(stderr,
"Error from X400msMsgDelete (IPN)%s\n",
358 static int do_report(
359 struct X400msSession *sp,
360 struct X400msMessage *mp
366 char recipient_str[BUFSIZ];
369 struct X400Recipient *rp;
375 fprintf(stderr,
"Got a report (printing only some attributes)\n");
379 buffer,
sizeof buffer, &length);
381 fprintf(stderr,
"Error from MsgGetStrParam: %s\n",
387 printf(
"Subject Identifier: %.*s\n", (
int)length, buffer);
395 fprintf(stderr,
"Error from RecipGet: %s\n",
405 sizeof recipient_str, &length);
407 fprintf(stderr,
"Error from RecipGetStrParam: %s\n",
414 printf(
"Delivery Report for recipient %d: %.*s\n", n,
415 (
int)length, recipient_str);
420 buffer,
sizeof buffer, &length);
424 printf(
"Delivery Time: %.*s\n", (
int)length, buffer);
428 printf(
"Negative Delivery Report for recipient %d: %.*s\n", n,
429 (
int)length, recipient_str);
433 buffer,
sizeof buffer,
436 fprintf(stderr,
"Error from RecipGetStrParam: %s\n",
440 printf(
"Supplementary Info: %.*s\n", (
int)length, buffer);
447 fprintf(stderr,
"Error from RecipGetIntParam: %s\n",
450 printf(
"Non-Delivery Reason: %d\n", intparam);
457 fprintf(stderr,
"Error from RecipGetIntParam: %s\n",
460 printf(
"Non-Delivery Diagnostic: %d\n", intparam);
466 fprintf(stderr,
"Error from X400msMsgDelete: %s\n",
472 static int handle_ipn(
473 struct X400msMessage *mp
476 struct X400Recipient *rp;
486 buffer,
sizeof buffer, &length);
488 fprintf(stderr,
"Error from MsgGetStrParam (X400_S_OR_ADDRESS): %s\n",
491 printf(
"IPN Originator: %.*s\n", (
int)length, buffer);
497 fprintf(stderr,
"Error from X400msRecipGet (X400_RECIP_ENVELOPE): %s\n",
501 buffer,
sizeof buffer, &length);
503 fprintf(stderr,
"Error from X400RecipGetStrParam (X400_S_OR_ADDRESS): %s\n",
507 buffer[length] =
'\0';
508 printf(
"IPN Recipient: %.*s\n", (
int)length, buffer);
515 buffer,
sizeof buffer, &length);
517 fprintf(stderr,
"Error from MsgGetStrParam (X400_S_SUBJECT_IPM): %s\n",
520 printf(
"Subject Message Identifier: %.*s\n", (
int)length, buffer);
525 buffer,
sizeof buffer, &length);
527 fprintf(stderr,
"Error from MsgGetStrParam (X400_S_CONVERSION_EITS): %s\n",
X400msError(status));
529 printf(
"conversion EITs: %.*s\n", (
int)length, buffer);
536 printf(
" non-receipt reason: %d\n", intparam);
538 fprintf(stderr,
"Error getting non-receipt reason: %s\n",
546 printf(
"discard reason: %d\n", intparam);
548 fprintf(stderr,
"Error getting discard reason: %s\n",
554 buffer,
sizeof buffer, &length);
556 fprintf(stderr,
"Error from MsgGetStrParam (X400_S_AUTOFORWARD_COMMENT): %s\n",
559 printf(
"autoforward comment: %.*s\n", (
int)length, buffer);
564 buffer,
sizeof buffer, &length);
566 fprintf(stderr,
"Error from MsgGetStrParam(X400_S_RECEIPT_TIME): %s\n",
569 printf(
" Time of receipt: (UTCTime format): %.*s\n", (
int)length, buffer);
576 printf(
" Acknowledgement mode: (0 - manual; 1 -automatic): %d\n",
579 fprintf(stderr,
"Error getting Acknowledgement mode: %s\n",
585 buffer,
sizeof buffer, &length);
587 fprintf(stderr,
"Error from MsgGetStrParam (X400_S_SUPP_RECEIPT_INFO): %s\n",
594 printf(
" Supplementary information: %.*s\n", (
int)length, buffer);
599 "Error from MsgGetIntParam (X400_N_CONTENT_TYPE,): %s\n",
602 printf(
"Content Type: %d\n", intparam);
611 static int handle_msg(
612 struct X400msSession *sp,
613 struct X400msMessage *mp
620 struct X400Recipient *rp;
628 fprintf(stderr,
"Error from MsgGetIntParam: %s\n",
631 printf(
"Size of Message: %d\n", intparam);
635 buffer,
sizeof buffer, &length);
637 fprintf(stderr,
"Error from MsgGetStrParam: %s\n",
643 printf(
"Message Identifier: %.*s\n", (
int)length, buffer);
647 buffer,
sizeof buffer, &length);
649 fprintf(stderr,
"Error from MsgGetStrParam: %s\n",
655 printf(
"Originator: %.*s\n", (
int)length, buffer);
663 fprintf(stderr,
"Error from RecipGet: %s\n",
X400msError(status));
671 buffer,
sizeof buffer, &length);
673 printf(
"Env Recipient %d: %.*s\n", n, (
int)length, buffer);
680 printf(
"Recipient proof of delivery request is %d\n", intparam);
682 fprintf(stderr,
"Error getting proof of delivery request: %s\n",
690 report_msg_token_info(rp);
702 fprintf(stderr,
"Error from RecipGet: %s\n",
X400msError(status));
710 buffer,
sizeof buffer, &length);
712 printf(
"Primary Recipient %d: %.*s\n", n, (
int)length, buffer);
717 printf(
"Primary Recipient Precedence %d\n", intparam);
719 fprintf(stderr,
"Error from RecipGet: %s\n",
X400msError(status));
726 buffer,
sizeof buffer, &length);
728 printf(
"Subject: %.*s\n", (
int)length, buffer);
732 buffer,
sizeof buffer, &length);
734 printf(
"Text:\n%.*s\n", (
int)length, buffer);
736 printf(
"No IA5 Text content (%d: %s)\n", status,
X400msError(status));
739 printf(
"Getting body parts\n");
747 struct X400msSession *sp,
748 struct X400msMessage *mp,
749 struct X400msMessage **ipn
755 fprintf (stderr,
"x400msMsgNew returned error: %s\n",
762 fprintf(stderr,
"Error from X400msMakeIPN: %s\n",
770 fprintf (stderr,
"x400msMsgSend returned error: %s\n",
774 printf(
"IPN submitted successfully\n");
788 static void setup_default_new_sec_env(
789 struct X400msSession *sp,
790 char *local_trusted_ca_certs_dir
796 printf(
" Adding %s as trusted CA cert dir\n", trusted_ca_certs_dir);
798 local_trusted_ca_certs_dir, -1);
800 fprintf (stderr,
"X400msSetStrDefault returned error: %s\n",
817 static void setup_default_old_sec_env(
818 struct X400msSession *sp,
837 fprintf (stderr,
"X400msSetStrDefault returned error: %s\n",
845 fprintf (stderr,
"X400msSetStrDefault returned error: %s\n",
852 static void report_msg_token_info(
853 struct X400Recipient *rp
864 fprintf(stderr,
"No MessageToken present in recipient\n");
868 fprintf(stderr,
"Error from RecipGetIntParam: %s (%d)\n",
871 fprintf(stderr,
"Message Token status not available\n");
874 "Message Token status %d \n", param);
879 fprintf(stderr,
"Token OK (%d)\n", param);
884 "Message Token validation cannot take place because the security environment is invalid (%d):\n",
896 "Message Token validation failed (%d): %s\n",
901 "Unexpected Message Token validation result (%d): %s\n",
911 buffer,
sizeof buffer, &length);
913 fprintf(stderr,
"Error from RecipGetStrParam: %s\n",
916 fprintf(stderr,
"recipient in token not available\n");
919 "Message Token(%u): recipient in Token '%.*s'\n",
920 (
unsigned)length, (
int)length, buffer);
925 buffer,
sizeof buffer, &length);
927 fprintf(stderr,
"Error from RecipGetStrParam: %s (%d)\n",
930 fprintf(stderr,
"Message Token DER not available\n");
933 "Message Token DER available (%u bytes)\n", (
unsigned)length);
939 fprintf(stderr,
"Error from RecipGetStrParam: %s (%d)\n",
942 fprintf(stderr,
"Message Token seq num not available\n");
945 "Message Token seq num %d \n", param);
950 buffer,
sizeof buffer, &length);
952 fprintf(stderr,
"Error from RecipGetStrParam: %s (%d)\n",
955 fprintf(stderr,
"Message Token Security Label DER not available\n");
958 "Message Token Security Label DER available (%u bytes)\n", (
unsigned)length);
959 fprintf(stderr,
"Security Label from Message Token is:\n");
960 print_sec_label((
unsigned char *)buffer, length);
967 printf(
"No Content Integrity Check in token\n");
969 printf(
"Error from RecipGetIntParam: %s\n",
X400msError(status));
976 printf(
"Content Integrity Check in token succeeded\n");
979 printf(
"Content Integrity Check in token error (%d): %s\n",
986 buffer,
sizeof buffer, &length);
988 fprintf(stderr,
"Error from RecipGetStrParam: %s (%d)\n",
991 fprintf(stderr,
"Message Token Content Integrity Check DER not available\n");
994 "Message Token Content Integrity Check DER available (%u bytes)\n",
1004 fprintf(stderr,
"Error from RecipGetStrParam: %s (%d)\n",
1007 fprintf(stderr,
"Message Token proof of delivery status not available\n");
1010 "Message Token proof of delivery status %d \n", param);
1016 fprintf(stderr,
"Error from RecipGetStrParam: %s (%d)\n",
1019 fprintf(stderr,
"Message Token security label status not available\n");
1022 "Message Token security label status %d \n", param);
1028 fprintf(stderr,
"Error from RecipGetStrParam: %s (%d)\n",
1031 fprintf(stderr,
"Message Token recip status not available\n");
1034 "Message Token recip status %d \n", param);
1042 static int get_sec_label(
1043 struct X400msMessage *mp
1046 unsigned char slab_buffer[XML_BUFSIZE];
1056 printf(
"No security label\n");
1058 fprintf(stderr,
"Failed to fetch security label: %d",status);
1061 fprintf(stderr,
"Security Label from envelope is:\n");
1062 print_sec_label(slab_buffer, length);
1067 static void print_sec_label(
1068 unsigned char slab_buffer[],
1073 char xml_buffer[XML_BUFSIZE];
1076 status = SecLabelInit(
"Example program");
1077 if (status != SECLABEL_E_NOERROR) {
1078 fprintf(stderr,
"SecLabelInit returned error %d\n", status);
1082 status = SecLabelPrint(slab_buffer,
1087 if (status != SECLABEL_E_NOERROR) {
1088 fprintf(stderr,
"SecLabelParse returned error %d\n", status);
1093 printf(
"Got security label:%s\n", xml_buffer);
1098 struct X400Recipient *rp
1101 char buffer[BUFSIZ];
1102 int status, cic_status;
1110 printf(
"No Content Integrity Check in recipient\n");
1113 printf(
"Error from RecipGetIntParam: %s\n",
X400msError(cic_status));
1120 printf(
"Content Integrity Check succeeded\n");
1123 printf(
"Content Integrity Check error (%d): %s\n",
1130 buffer,
sizeof buffer, &length);
1132 fprintf(stderr,
"Error getting recipient cic: %s\n",
1135 printf(
"Content Integrity Check found in recipient (%d)\n",
1144 static void show_certificate (
1145 struct X400Recipient *rp,
1150 struct X400Certificate *cert;
1151 char buffer[BUFSIZ];
1157 fprintf (stderr,
"Error getting %s certificate: %s\n",
1164 buffer,
sizeof buffer, &length);
1166 fprintf(stderr,
"Error getting subject of cert used for %s: %s\n",
1169 printf(
"Subject of Cert used to verify %s (%.*s)\n",
1170 tag, (
int)length, buffer);
1175 buffer,
sizeof buffer, &length);
1177 fprintf(stderr,
"Error getting issuer of cert used for %s: %s\n",
1180 printf(
"Issuer of Cert used to verify %s (%.*s)\n",
1181 tag, (
int)length, buffer);
1187 buffer,
sizeof buffer, &length);
1189 fprintf(stderr,
"Error getting serial num of cert used for %s: %s\n",
1192 printf(
"Serial Num of Cert used to verify %s (%.*s)\n",
1193 tag, (
int)length, buffer);
1198 buffer,
sizeof buffer, &length);
1200 fprintf(stderr,
"Error getting cert der used for %s: %s\n",
1204 "Returned Cert used to verify %s (%d)\n",
1210 buffer,
sizeof buffer, &length);
1213 fprintf(stderr,
"No ORaddress subject alt. name\n");
1215 fprintf(stderr,
"Error from CertGetStrParam: %s\n",
1220 fprintf(stderr,
"ORaddress subject alt name: '%.*s'\n",
1221 (
int)length, buffer);
1227 fprintf(stderr,
"Error from CertGetStrParam: %s\n",
1232 fprintf(stderr,
"ORaddress subject alt name status: %s\n",
1236 static void usage(
void) {
1237 printf(
"usage: %s\n", optstr);
1238 printf(
"\t where:\n");
1239 printf(
"\t -u : Don't prompt to override defaults \n");
1240 printf(
"\t -3 : Use P3 connection \n");
1241 printf(
"\t -7 : Use P7 connection \n");
1242 printf(
"\t -m : OR Address in P7 bind arg \n");
1243 printf(
"\t -d : DN in P7 bind arg \n");
1244 printf(
"\t -p : Presentation Address of P7 Store \n");
1245 printf(
"\t -w : P7 password of P7 user \n");
1246 printf(
"\t -M : OR Address in P3 bind arg \n");
1247 printf(
"\t -D : DN in P3 bind arg \n");
1248 printf(
"\t -P : Presentation Address of P3 server\n");
1249 printf(
"\t -W : P3 password of P3 user \n");
1250 printf(
"\t -e : Security Environment (dir with x509 subdir): obsolete, use -Y <p12file>\n");
1251 printf(
"\t -x : DN of X.509 Digital Identity\n");
1252 printf(
"\t -b : Passphrase for private key in PKCS12 file\n");
1253 printf(
"\t -E : Fetch messages until all read\n");
1254 printf(
"\t -Y : Filename of PKCS12 file containing Digital Identity\n");
1255 printf(
"\t -U : Directory containing trust anchors\n");
1256 printf(
"\t -I : Generate IPN from message received\n");
#define X400_S_CERT_SERIAL_NUM
#define X400_S_MSGTOK_RECIP
#define X400_N_NON_RECEIPT_REASON
#define X400_S_LOG_CONFIGURATION_FILE
int X400msSetStrDefault(struct X400msSession *sp, int paramtype, const char *value, size_t length)
Set a default string parameter value in a session.
#define X400_N_MSGTOK_SEC_LAB_STATUS
#define X400_S_CERT_SUBJECT_DN
#define X400_S_SUBJECT_IDENTIFIER
#define X400_N_CONTENT_LENGTH
int X400msMsgGetIntParam(struct X400msMessage *mp, int paramtype, int *valp)
Return a integer-valued parameter from the message object.
#define X400_S_SEC_IDENTITY
#define X400_E_X509_CERT_INVALID
#define X400_N_MSGTOK_RECIP_STATUS
int X400msMsgGet(struct X400msSession *sp, int number, struct X400msMessage **mpp, int *typep, int *seqp)
Get message object for transfer out from MS or MTA via P3.
#define X400_S_MSGTOK_CIC
#define X400_N_MSGTOK_STATUS
#define X400_N_PRECEDENCE
#define X400_S_SUPPLEMENTARY_INFO
const char * X400msError(int error)
Obtain a string describing the meaning of the given error code.
#define X400_E_X509_VERIFY_FAIL_NO_CERT
int X400msMsgNew(struct X400msSession *sp, int type, struct X400msMessage **mpp)
Creates new message.
int X400msClose(struct X400msSession *sp)
Close a X400 Session.
#define X400_S_MSGTOK_SEC_LAB
int X400msMakeIPN(struct X400msMessage *mp, int non_receipt_reason, struct X400msMessage **mpp)
Make an IPN based on the subject IPM.
#define X400_N_PROOF_OF_DEL_REQ
int X400msRecipGet(struct X400msMessage *mp, int type, int number, struct X400Recipient **rpp)
Get recipient object from message.
int X400msOpen(int type, const char *oraddr, const char *dirname, const char *credentials, const char *pa, int *messages, struct X400msSession **spp)
Open a session to a Message Store (P7) or MTA (P3) in synchronous mode.
#define X400_N_CERT_ORADDRESS_STATUS
#define X400_S_OR_ADDRESS
#define X400_N_CONTENT_TYPE
#define X400_S_SUBJECT_IPM
#define X400_S_MSGTOK_DER
#define X400_S_SEC_IDENTITY_PASSPHRASE
#define X400_S_SUPP_RECEIPT_INFO
#define X400_S_MESSAGE_IDENTIFIER
int X400msMsgGetStrParam(struct X400msMessage *mp, int paramtype, char *buffer, size_t buflen, size_t *paramlenp)
Return a string-valued parameter from the message object.
#define X400_E_X509_VERIFY_FAIL
#define X400_N_CERT_RECIP_CIC
int X400msRecipGetIntParam(struct X400Recipient *rp, int paramtype, int *valp)
Return a integer-valued parameter from the recipient object.
#define X400_S_SECURITY_LABEL
#define X400_RECIP_PRIMARY
#define X400_N_DISCARD_REASON
int X400CertGetIntParam(struct X400Certificate *cp, int paramtype, int *valp)
Return a integer-valued parameter from the certificate object.
#define X400_S_SEC_IDENTITY_DN
#define X400_E_X509_VERIFY_FAIL_UNSUPPORTED_ALG
#define X400_N_RECIP_CIC_STATUS
int X400msMsgSend(struct X400msMessage *mp)
Send message object.
#define X400_E_X509_VERIFY_FAIL_INCOMPAT_ALG
int X400msRecipGetStrParam(struct X400Recipient *rp, int paramtype, char *buffer, size_t buflen, size_t *paramlenp)
Return a string-valued parameter from the recipient object.
#define X400_N_NON_DELIVERY_REASON
#define X400_B_RETURN_VERIFICATION_ERRORS
X400 MA/MS (P3/P7) Interface.
#define X400_S_CERT_ISSUER_DN
#define X400_N_CERT_MSGTOK
#define X400_N_MSGTOK_SEQ_NUM
int X400msSetIntDefault(struct X400msSession *sp, int paramtype, int value)
Set a default integer parameter value in a session.
#define X400_E_X509_ITEM_INVALID
int X400msWait(struct X400msSession *sp, int seconds, int *count)
Wait for messages to be ready to be read.
#define X400_RECIP_ENVELOPE
#define X400_S_CONVERSION_EITS
#define X400_S_SEC_TRUSTED_CERTS_DIR
#define X400_N_NON_DELIVERY_DIAGNOSTIC
#define X400_N_MSGTOK_PODR_STATUS
int X400RecipGetCert(struct X400Recipient *rp, int certtype, struct X400Certificate **certp)
Get certificate object from recipient This returns a certificate which was used to sign an object in ...
#define X400_N_MSGTOK_CIC_STATUS
#define X400_S_AUTOFORWARD_COMMENT
#define X400_RECIP_REPORT
int X400msMsgDelete(struct X400msMessage *mp, int retain)
Delete message object.
#define X400_N_CERT_MSGTOK_CIC
int X400CertGetStrParam(struct X400Certificate *cp, int paramtype, char *buffer, size_t buflen, size_t *paramlenp)
Return a string-valued parameter from the certificate object.
#define X400_S_RECEIPT_TIME
#define X400_E_X509_VERIFY_FAIL_NO_PUBKEY
int X400RecipGetStrParam(struct X400Recipient *rp, int paramtype, char *buffer, size_t buflen, size_t *paramlenp)
Return a string-valued parameter from the recipient object.
#define X400_S_MESSAGE_DELIVERY_TIME