23#include <seclabel_api.h>
28static char *optstr =
"u37m:d:p:w:M:D:P:W:r:o:O:r:g:G:c:l:R:y:C:iaqsAve:x:b:f:S:Y:Z4U:L:";
31static char *default_recip =
"/CN=lppt1/OU=lppt/O=attlee/PRMD=TestPRMD/ADMD=TestADMD/C=GB/";
33static char *content_id =
"030924.140212";
34static const char text[] =
"First line\r\nSecond line\r\n";
35static char *binary_data;
37const char* xml_filename =
"seclabel.xml";
39static int setup_msg_sec_env = 0;
42int num_unverified_rcvd;
47static void usage(
void) ;
57 struct X400msSession *sp
61 struct X400msSession *sp
64static int setup_default_new_sec_env(
65 struct X400msSession *sp,
66 char *identity_filename,
70static int setup_default_old_sec_env(
71 struct X400msSession *sp,
77static int setup_msg_new_sec_env(
78 struct X400msMessage *mp,
79 char *identity_filename,
83static int add_x411_label(
84 struct X400msMessage *mp,
85 const char* xml_filename
88static int add_4066_label(
89 struct X400msMessage *mp,
90 const char* xml_filename
93static int setup_msg_old_sec_env(
94 struct X400msMessage *mp,
100static int report_moac_info(
101 struct X400msMessage *mp
104static void show_4406_certificate (
struct X400msMessage *mp);
105static void show_certificate (
struct X400msMessage *mp);
106static int report_4406_info(
107 struct X400msMessage *mp
110static void print_sec_label(
128 char password[BUFSIZ];
130 if (get_args(argc, argv, optstr)) {
135 printf(
"Connection type (0 = P7, 1 = P3 submit only, 2 = P3 both directions) [%d]: ", x400_contype);
136 contype = ic_fgetc(x400_contype, stdin);
138 ic_fgetc(x400_contype, stdin);
140 if ( contype <
'0' ||
'2' < contype )
141 contype = x400_contype;
146 def_oraddr = x400_ms_user_addr;
147 def_dn = x400_ms_user_dn;
148 def_pa = x400_ms_presentation_address;
150 def_oraddr = x400_mta_user_addr;
151 def_dn = x400_mta_user_dn;
152 def_pa = x400_mta_presentation_address;
155 printf(
"Your ORAddress [%s] > ", def_oraddr);
156 ic_fgets (orn,
sizeof orn, stdin);
158 if ( orn[strlen(orn)-1] ==
'\n' )
159 orn[strlen(orn)-1] =
'\0';
162 strcpy(orn, def_oraddr);
165 printf (
"Password [%s]: ",
166 contype == 0 ? x400_p7_password : x400_p3_password);
167 if ( ic_fgets (password,
sizeof password, stdin) == NULL )
170 if (password[strlen(password)-1] ==
'\n' )
171 password[strlen(password)-1] =
'\0';
172 if (password[0] ==
'\0')
173 strcpy(password, contype == 0 ? x400_p7_password : x400_p3_password);
176 printf(
"Presentation Address [%s] > ", def_pa);
177 ic_fgets (pa,
sizeof pa, stdin);
179 if ( pa[strlen(pa)-1] ==
'\n' )
180 pa[strlen(pa)-1] =
'\0';
185 printf(
"sending message using session 1\n");
186 if ((status = send_msg(contype, orn, def_dn, pa, password))
188 fprintf (stderr,
"Error in sending message\n");
191 printf(
"sending message using session 2\n");
192 if ((status = send_msg(contype, orn, def_dn, pa, password))
194 fprintf (stderr,
"Error sending message\n");
208 struct X400msSession *sp;
214 status =
X400msOpen (contype, orn, def_dn, password, pa, NULL, &sp);
216 fprintf (stderr,
"Error in Open: %s\n",
X400msError (status));
217 fprintf (stderr,
"%s %s %s\n", orn, def_dn, pa);
236 if (use_new_sec_env) {
237 status = setup_default_new_sec_env(sp, identity_filename, passphrase);
239 status = setup_default_old_sec_env(sp, security_id, identity_dn,
244 fprintf (stderr,
"Can't setup security environment\n");
248 printf(
"sending message 1\n");
249 status = submit_msg(orn, sp);
251 fprintf (stderr,
"Can't submit\n");
255 printf(
"sending message 2\n");
256 status = submit_msg(orn, sp);
258 fprintf (stderr,
"Can't submit\n");
262 printf(
"sending message 3\n");
263 status = submit_msg(orn, sp);
265 fprintf (stderr,
"Can't submit\n");
270 status = get_msg(sp);
272 fprintf(stderr,
"Error in getting msg: %s\n",
279 fprintf (stderr,
"X400msClose returned error: %s\n",
X400msError (status));
285static int submit_msg(
287 struct X400msSession *sp
290 struct X400msMessage *mp;
291 struct X400Recipient *rp;
297 if (x400_default_recipient != NULL)
298 recip = x400_default_recipient;
300 recip = default_recip;
302 printf(
"Message recipient [%s]: ", recip);
303 ic_fgets (tmp,
sizeof tmp, stdin);
305 if ( tmp[strlen(tmp)-1] ==
'\n' )
306 tmp[strlen(tmp)-1] =
'\0';
307 if (strlen(tmp) != 0)
310 printf(
"Subject [%s]: ", subject);
311 ic_fgets (tmp,
sizeof tmp, stdin);
313 if ( tmp[strlen(tmp)-1] ==
'\n' )
314 tmp[strlen(tmp)-1] =
'\0';
315 if (strlen(tmp) != 0)
316 subject = strdup(tmp);
320 fprintf (stderr,
"x400msMsgNew returned error: %s\n",
X400msError (status));
337 if (setup_msg_sec_env) {
338 if (use_new_sec_env) {
339 status = setup_msg_new_sec_env(mp, identity_filename, passphrase);
341 fprintf (stderr,
"Can't setup new security environment\n");
345 status = setup_msg_old_sec_env(mp, security_id, identity_dn2,
348 fprintf (stderr,
"Can't setup old security environment\n");
363 fprintf (stderr,
"x400msMsgAddStrParam returned error: %s\n",
376 printf(
"\nRequesting 4406 signature\n");
379 fprintf (stderr,
"x400msMsgAddStrParam returned error: %s\n",
X400msError (status));
384 printf(
"\nAdding 4406 label\n");
385 status = add_4066_label (mp, xml_filename);
387 fprintf (stderr,
"add_4406_label returned error: %s\n",
393 printf(
"\nNot requesting 4406 signature\n");
396 if (need_x411_label) {
397 status = add_x411_label (mp, xml_filename);
399 fprintf (stderr,
"add_x411_label returned error: %s\n",
404 printf(
"\nNot requesting X.411 Label\n");
409 fprintf (stderr,
"x400msRecipNew returned error: %s\n",
X400msError (status));
415 fprintf (stderr,
"x400msRecipAddStrParam returned error: %s\n",
X400msError (status));
421 fprintf (stderr,
"x400msRecipAddStrParam returned error: %s\n",
X400msError (status));
427 fprintf (stderr,
"x400msMsgAddStrParam returned error: %s\n",
X400msError (status));
433 fprintf (stderr,
"x400msMsgAddStrParam returned error: %s\n",
X400msError (status));
440 fprintf (stderr,
"x400msRecipAddStrParam returned error: %s\n",
X400msError (status));
447 fprintf (stderr,
"x400msRecipAddStrParam returned error: %s\n",
X400msError (status));
454 fprintf (stderr,
"x400msMsgAddStrParam returned error: %s\n",
X400msError (status));
460 fprintf (stderr,
"x400msMsgAddStrParam returned error: %s\n",
X400msError (status));
466 fprintf (stderr,
"x400ms returned error: %s\n",
X400msError (status));
473 printf(
"failed to add X400_T_IA5TEXT BP\n");
478 if (filename_to_send != NULL) {
479 binary_data = (
char *) malloc(100000);
480 if ( binary_data == NULL )
482 fp = fopen(filename_to_send,
"r");
483 if (fp == (FILE *)NULL) {
484 printf(
"Cannot open binary file\n");
487 if ((fs = fread (binary_data,
sizeof(
char), 100000/
sizeof(
char), fp) ) == -1) {
488 printf(
"Cannot read from binary file\n");
495 printf(
"failed to add X400_T_BINARY BP\n");
499 printf(
"no binary file set - not sending X400_T_BINARY\n");
504 fprintf (stderr,
"x400msMsgSend returned error: %s\n",
X400msError (status));
507 printf(
"Message submitted successfully\n");
512 fprintf (stderr,
"x400msMsgDelete returned error: %s\n",
X400msError (status));
523static int setup_default_new_sec_env(
524 struct X400msSession *sp,
535 fprintf (stderr,
"X400msSetStrDefault returned error: %s\n",
543 fprintf (stderr,
"X400msSetStrDefault returned error: %s\n",
551 fprintf (stderr,
"X400msTestSecurityEnv returned error: %s\n",
559static int setup_default_old_sec_env(
560 struct X400msSession *sp,
577 fprintf (stderr,
"X400msSetStrDefault returned error: %s\n",
585 fprintf (stderr,
"X400msSetStrDefault returned error: %s\n",
593static int setup_msg_new_sec_env(
594 struct X400msMessage *mp,
605 fprintf (stderr,
"X400msMsgAddStrParam returned error: %s\n",
613 fprintf (stderr,
"x400msMsgAddStrParam returned error: %s\n",
620static int setup_msg_old_sec_env(
621 struct X400msMessage *mp,
635 fprintf (stderr,
"x400msMsgAddStrParam returned error: %s\n",
643 fprintf (stderr,
"x400msMsgAddStrParam returned error: %s\n",
651 fprintf (stderr,
"x400msMsgAddStrParam returned error: %s\n",
659static int add_4066_label(
660 struct X400msMessage *mp,
665#define XML_BUFSIZE 1024
666#define STRING_BUFSIZE 1024
669 char xml_content[XML_BUFSIZE];
670 char str_content[STRING_BUFSIZE];
671 int str_len = STRING_BUFSIZE;
674 printf(
"Adding 4406 Security Label, using file %s\n", filename);
676 fd = fopen(filename,
"r");
678 fprintf(stderr,
"Failed to open %s : %s\n",
679 filename,strerror(errno));
682#pragma GCC diagnostic push
683#pragma GCC diagnostic ignored "-Wunused-result"
684 fread(&xml_content,XML_BUFSIZE,1,fd);
685#pragma GCC diagnostic pop
689 status = SecLabelInit(
"Example program 2");
690 if (status != SECLABEL_E_NOERROR) {
691 fprintf(stderr,
"SecLabelInit returned error %d\n", status);
696 status = SecLabelParse(xml_content,
701 if (status != SECLABEL_E_NOERROR) {
702 fprintf(stderr,
"SecLabelParse returned error %d\n", status);
708 str_content,str_len);
710 fprintf (stderr,
"x400msMsgAddStrParam returned error: %s\n",
719static int add_x411_label(
720 struct X400msMessage *mp,
725#define XML_BUFSIZE 1024
726#define STRING_BUFSIZE 1024
729 char xml_content[XML_BUFSIZE];
730 char str_content[STRING_BUFSIZE];
731 int str_len = STRING_BUFSIZE;
734 printf(
"Adding X.411 Security Label, using file %s\n", filename);
736 fd = fopen(filename,
"r");
738 fprintf(stderr,
"Failed to open %s : %s\n",
739 filename,strerror(errno));
742#pragma GCC diagnostic push
743#pragma GCC diagnostic ignored "-Wunused-result"
744 fread(&xml_content,XML_BUFSIZE,1,fd);
745#pragma GCC diagnostic pop
749 status = SecLabelInit(
"Example program");
750 if (status != SECLABEL_E_NOERROR) {
751 fprintf(stderr,
"SecLabelInit returned error %d\n", status);
756 status = SecLabelParse(xml_content,
761 if (status != SECLABEL_E_NOERROR) {
762 fprintf(stderr,
"SecLabelParse returned error %d\n", status);
768 str_content,str_len);
770 fprintf (stderr,
"x400msMsgAddStrParam returned error: %s\n",
780 struct X400msSession *sp
788 struct X400msMessage *mp;
789 struct X400Recipient *rp;
793 char recipient_str[BUFSIZ];
795 printf(
"Waiting for new messages for 10 seconds\n");
798 fprintf(stderr,
"Error from Wait: %s\n",
X400msError(status));
833 if (x400_default_recipient != NULL)
834 printf(
"Getting message\n");
838 fprintf(stderr,
"MsgGet successfully got message\n");
841 fprintf(stderr,
"Error from MsgGet: %s\n",
X400msError(status));
849 fprintf(stderr,
"Got a report (printing only some attributes)\n");
853 buffer,
sizeof buffer, &length);
855 fprintf(stderr,
"Error from MsgGetStrParam: %s\n",
861 printf(
"Subject Identifier: %.*s\n", (
int)length, buffer);
869 fprintf(stderr,
"Error from RecipGet: %s\n",
879 sizeof recipient_str, &length);
881 fprintf(stderr,
"Error from RecipGetStrParam: %s\n",
888 printf(
"Positive Delivery Report for recipient %d: %.*s\n", n,
889 (
int)length, recipient_str);
894 buffer,
sizeof buffer, &length);
897 printf(
"Delivery Time: %.*s\n", (
int)length, buffer);
901 printf(
"Negative Delivery Report for recipient %d: %s\n", n,
906 buffer,
sizeof buffer,
909 fprintf(stderr,
"Error from RecipGetStrParam: %s\n",
913 printf(
"Supplementary Info: %.*s\n", (
int)length, buffer);
920 fprintf(stderr,
"Error from MsgGetIntParam: %s\n",
923 printf(
"Non-Delivery Reason: %d\n", intparam);
930 fprintf(stderr,
"Error from MsgGetIntParam: %s\n",
933 printf(
"Non-Delivery Diagnostic: %d\n", intparam);
937 num_unsigned_rcvd++ ;
940 fprintf(stderr,
"Error from X400msMsgDelete: %s\n",
949 buffer,
sizeof buffer, &length);
951 printf(
"No X.411 security label\n");
953 fprintf(stderr,
"Failed to fetch X.411 security label: %d (%s)",
957 fprintf(stderr,
"X.411 Security Label returned OK (%d chars)\n",
959 print_sec_label(buffer, length);
963 report_moac_info(mp);
966 report_4406_info(mp);
970 buffer,
sizeof buffer, &length);
972 fprintf(stderr,
"Error from MsgGetStrParam: %s\n",
978 printf(
"Message Identifier: %.*s\n", (
int)length, buffer);
982 buffer,
sizeof buffer, &length);
984 fprintf(stderr,
"Error from MsgGetStrParam: %s\n",
990 printf(
"Originator: %.*s\n", (
int)length, buffer);
998 fprintf(stderr,
"Error from RecipGet: %s\n",
X400msError(status));
1006 buffer,
sizeof buffer, &length);
1008 printf(
"Recipient %d: %.*s\n", n, (
int)length, buffer);
1014 buffer,
sizeof buffer, &length);
1016 printf(
"Subject: %.*s\n", (
int)length, buffer);
1020 buffer,
sizeof buffer, &length);
1022 printf(
"Text:\n%.*s\n", (
int)length, buffer);
1040static void setup_default_new_sec_env(
1041 struct X400msSession *sp,
1042 char *trusted_ca_certs_dir
1048 printf(
" Adding %s as trusted CA cert dir\n", trusted_ca_certs_dir);
1050 trusted_ca_certs_dir, -1);
1052 fprintf (stderr,
"X400msSetStrDefault returned error: %s\n",
1069static void setup_default_old_sec_env(
1070 struct X400msSession *sp,
1089 fprintf (stderr,
"X400msSetStrDefault returned error: %s\n",
1097 fprintf (stderr,
"X400msSetStrDefault returned error: %s\n",
1106static int report_moac_info(
1107 struct X400msMessage *mp
1117 num_unverified_rcvd++ ;
1118 fprintf (stderr,
"No MOAC in message\n");
1122 num_unverified_rcvd++ ;
1123 fprintf (stderr,
"Unexpected error getting MOAC status: %s\n",
1128 fprintf (stderr,
"Have MOAC in message (%d)\n", intparam);
1132 "MsgGet successfully verified signature in message\n");
1133 show_certificate (mp);
1134 fprintf(stderr,
"continuing ...\n");
1135 num_verified_rcvd++ ;
1139 "MOAC validation cannot take place because the security environment is invalid (%d):\n",
1146 "MOAC validation cannot take place because the security environment is invalid (%d):\n",
1151 fprintf(stderr,
"Verification Error from MsgGet: %s\n",
1153 show_certificate (mp);
1154 fprintf(stderr,
"continuing ...\n");
1155 num_unverified_rcvd++ ;
1158 fprintf(stderr,
"Verification Error from MsgGet: %s\n",
1160 fprintf(stderr,
"continuing ...\n");
1161 num_unverified_rcvd++ ;
1164 fprintf(stderr,
"Verification Error from MsgGet: %s\n",
1166 show_certificate (mp);
1167 fprintf(stderr,
"continuing ...\n");
1168 num_unverified_rcvd++ ;
1171 fprintf(stderr,
"Verification Error from MsgGet: %s\n",
1173 show_certificate (mp);
1174 fprintf(stderr,
"continuing ...\n");
1175 num_unverified_rcvd++ ;
1178 fprintf(stderr,
"Verification Error from MsgGet: %s\n",
1180 show_certificate (mp);
1181 fprintf(stderr,
"continuing ...\n");
1182 num_unverified_rcvd++ ;
1185 fprintf(stderr,
"Verification Error from MsgGet: %s\n",
1187 show_certificate (mp);
1188 fprintf(stderr,
"continuing ...\n");
1189 num_unverified_rcvd++ ;
1192 fprintf(stderr,
"Verification Error from MsgGet: %s\n",
1194 show_certificate (mp);
1195 fprintf(stderr,
"continuing ...\n");
1196 num_unverified_rcvd++ ;
1199 fprintf(stderr,
"Unexpected verification error from MsgGet: %s\n",
1201 show_certificate (mp);
1202 fprintf(stderr,
"continuing ...\n");
1203 num_unverified_rcvd++ ;
1211static int report_4406_info(
1212 struct X400msMessage *mp
1218 char buffer[BUFSIZ];
1224 num_unverified_rcvd++ ;
1225 fprintf (stderr,
"No 4406 signature in message\n");
1229 num_unverified_rcvd++ ;
1230 fprintf (stderr,
"Unexpected error getting 4406 signature status: %s\n",
1235 fprintf (stderr,
"Have 4406 signature in message (%d)\n", intparam);
1239 "MsgGet successfully verified signature in message\n");
1240 show_4406_certificate (mp);
1241 fprintf(stderr,
"continuing ...\n");
1242 num_verified_rcvd++ ;
1246 "4406 signature validation cannot take place because the security environment is invalid (%d):\n",
1253 "4406 signature validation cannot take place because the security environment is invalid (%d):\n",
1258 fprintf(stderr,
"Verification Error from MsgGet: %s\n",
1260 show_4406_certificate (mp);
1261 fprintf(stderr,
"continuing ...\n");
1262 num_unverified_rcvd++ ;
1265 fprintf(stderr,
"Verification Error from MsgGet: %s\n",
1267 fprintf(stderr,
"continuing ...\n");
1268 num_unverified_rcvd++ ;
1271 fprintf(stderr,
"Verification Error from MsgGet: %s\n",
1273 show_4406_certificate (mp);
1274 fprintf(stderr,
"continuing ...\n");
1275 num_unverified_rcvd++ ;
1278 fprintf(stderr,
"Verification Error from MsgGet: %s\n",
1280 show_4406_certificate (mp);
1281 fprintf(stderr,
"continuing ...\n");
1282 num_unverified_rcvd++ ;
1285 fprintf(stderr,
"Verification Error from MsgGet: %s\n",
1287 show_4406_certificate (mp);
1288 fprintf(stderr,
"continuing ...\n");
1289 num_unverified_rcvd++ ;
1292 fprintf(stderr,
"Verification Error from MsgGet: %s\n",
1294 show_4406_certificate (mp);
1295 fprintf(stderr,
"continuing ...\n");
1296 num_unverified_rcvd++ ;
1299 fprintf(stderr,
"Verification Error from MsgGet: %s\n",
1301 show_4406_certificate (mp);
1302 fprintf(stderr,
"continuing ...\n");
1303 num_unverified_rcvd++ ;
1306 fprintf(stderr,
"Unexpected verification error from MsgGet: %s\n",
1308 show_4406_certificate (mp);
1309 fprintf(stderr,
"continuing ...\n");
1310 num_unverified_rcvd++ ;
1317 buffer,
sizeof buffer, &length);
1319 printf(
"No 4406 security label\n");
1321 fprintf(stderr,
"Failed to fetch 4406 security label: %d (%s)",
1325 fprintf(stderr,
"4406 Security Label returned OK (%d chars)\n",
1327 print_sec_label(buffer, length);
1332 buffer,
sizeof buffer, &length);
1334 printf(
"4406 signing time returned OK\n%.*s\n", (
int)length, buffer);
1336 printf(
"4406 signing time not returned (%d) (%s)\n", status,
1342static void print_sec_label(
1348 char xml_buffer[XML_BUFSIZE];
1351 status = SecLabelInit(
"Example program");
1352 if (status != SECLABEL_E_NOERROR) {
1353 fprintf(stderr,
"SecLabelInit returned error %d\n", status);
1357 status = SecLabelPrint((
const unsigned char *) slab_buffer,
1362 if (status != SECLABEL_E_NOERROR) {
1363 fprintf(stderr,
"SecLabelParse returned error %d\n", status);
1368 printf(
"Got security label:%s\n", xml_buffer);
1372static void show_certificate (
struct X400msMessage *mp)
1375 struct X400Certificate *cert;
1376 char buffer[BUFSIZ];
1382 fprintf (stderr,
"Error getting MOAC certificate: %s\n",
1388 buffer,
sizeof buffer, &length);
1390 fprintf(stderr,
"Error from CertGetStrParam: %s\n",
1395 "subject DN of originator certificate '%.*s'\n", (
int)length, buffer);
1397 buffer,
sizeof buffer, &length);
1399 fprintf(stderr,
"Error from CertGetStrParam: %s\n",
1404 "issuer DN of originator certificate '%.*s'\n", (
int)length, buffer);
1407 buffer,
sizeof buffer, &length);
1410 fprintf(stderr,
"No ORaddress subject alt. name\n");
1412 fprintf(stderr,
"Error from CertGetStrParam: %s\n",
1417 fprintf(stderr,
"ORaddress subject alt name: '%.*s'\n", (
int)length, buffer);
1423 fprintf(stderr,
"Error from CertGetStrParam: %s\n",
1428 fprintf(stderr,
"ORaddress subject alt name status: %s\n",
1433static void show_4406_certificate (
struct X400msMessage *mp)
1436 struct X400Certificate *cert;
1437 char buffer[BUFSIZ];
1443 fprintf (stderr,
"Error getting 4406 certificate: %s\n",
1449 buffer,
sizeof buffer, &length);
1451 fprintf(stderr,
"Error from CertGetStrParam: %s\n",
1455 fprintf(stderr,
"subject DN of originator certificate '%.*s'\n",
1456 (
int)length, buffer);
1458 buffer,
sizeof buffer, &length);
1460 fprintf(stderr,
"Error from CertGetStrParam: %s\n",
1464 fprintf(stderr,
"issuer DN of originator certificate '%.*s'\n",
1465 (
int)length, buffer);
1468 buffer,
sizeof buffer, &length);
1471 fprintf(stderr,
"No ORaddress subject alt. name\n");
1473 fprintf(stderr,
"Error from CertGetStrParam: %s\n",
1478 fprintf(stderr,
"ORaddress subject alt name: '%.*s'\n",
1479 (
int)length, buffer);
1485 fprintf(stderr,
"Error from CertGetStrParam: %s\n",
1490 fprintf(stderr,
"ORaddress subject alt name status: %s\n",
1495static void usage(
void) {
1496 printf(
"usage: %s\n", optstr);
1497 printf(
"\t where:\n");
1498 printf(
"\t -u : Don't prompt to override defaults \n");
1499 printf(
"\t -3 : Use P3 connection \n");
1500 printf(
"\t -7 : Use P7 connection \n");
1501 printf(
"\t -m : OR Address in P7 bind arg \n");
1502 printf(
"\t -d : DN in P7 bind arg \n");
1503 printf(
"\t -p : Presentation Address of P7 Store \n");
1504 printf(
"\t -w : P7 password of P7 user \n");
1505 printf(
"\t -M : OR Address in P3 bind arg \n");
1506 printf(
"\t -D : DN in P3 bind arg \n");
1507 printf(
"\t -P : Presentation Address of P3 server\n");
1508 printf(
"\t -W : P3 password of P3 user \n");
1509 printf(
"\t -o : Originator \n");
1510 printf(
"\t -O : Originator Return Address \n");
1511 printf(
"\t -r : Recipient\n");
1512 printf(
"\t -l : Logline\n");
1513 printf(
"\t -y : Priority (0 - normal, 1 - non-urgent, 2 - urgent \n");
1514 printf(
"\t -C : Content Type (2/22/772/OID) \n");
1515 printf(
"\t -i : Implicit conversion prohibited = TRUE \n");
1516 printf(
"\t -a : Alternate Recipient Prohibited = TRUE \n");
1517 printf(
"\t -q : Content Return Request = TRUE \n");
1518 printf(
"\t -s : Disclosure of Recipient = FALSE \n");
1519 printf(
"\t -A : Recipient Reassignment Prohibited = FALSE \n");
1520 printf(
"\t -v : Conversion with Loss Prohibited = FALSE \n");
1521 printf(
"\t -e : Security Environment (dir with x509 subdir): obsolete, use -Y <p12file>\n");
1522 printf(
"\t -x : DN of X.509 Digital Identity\n");
1523 printf(
"\t -b : Passphrase for private key in PKCS12 file\n");
1524 printf(
"\t -f : Filename to transfer as binary bp\n");
1525 printf(
"\t -Y : Filename of PKCS12 file containing Digital Identity\n");
1526 printf(
"\t -4 : Generate STANAG 4406 PCT Signatures\n");
#define X400_N_CERT_ORADDRESS_STATUS
#define X400_S_CERT_ISSUER_DN
#define X400_S_CERT_SUBJECT_DN
int X400CertGetStrParam(struct X400Certificate *cp, int paramtype, char *buffer, size_t buflen, size_t *paramlenp)
Return a string-valued parameter from the certificate object.
int X400CertGetIntParam(struct X400Certificate *cp, int paramtype, int *valp)
Return a integer-valued parameter from the certificate object.
int X400msMsgAddStrParam(struct X400msMessage *mp, int paramtype, const char *value, size_t length)
Add string-valued parameter to the message.
int X400msMsgGetCert(struct X400msMessage *mp, int certtype, struct X400Certificate **certp)
Get certificate object from message This returns a certificate which was used to sign an object in th...
int X400msRecipGet(struct X400msMessage *mp, int type, int number, struct X400Recipient **rpp)
Get recipient object from message.
int X400msRecipAddIntParam(struct X400Recipient *rp, int paramtype, int value)
Add integer-valued parameter to the message.
int X400msMsgAddIntParam(struct X400msMessage *mp, int paramtype, int value)
Add integer-valued parameter to the message.
int X400msMsgGetStrParam(struct X400msMessage *mp, int paramtype, char *buffer, size_t buflen, size_t *paramlenp)
Return a string-valued parameter from the message object.
int X400msRecipGetStrParam(struct X400Recipient *rp, int paramtype, char *buffer, size_t buflen, size_t *paramlenp)
Return a string-valued parameter from the recipient object.
int X400msRecipNew(struct X400msMessage *mp, int type, struct X400Recipient **rpp)
Add new recipient to a message.
int X400msWait(struct X400msSession *sp, int seconds, int *count)
Wait for messages to be ready to be read.
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.
const char * X400msError(int error)
Obtain a string describing the meaning of the given error code.
int X400msRecipAddStrParam(struct X400Recipient *rp, int paramtype, const char *value, size_t length)
Add string-valued parameter to the message.
int X400msTestSecurityEnv(struct X400msSession *sp)
Test the default Security Environment.
int X400msSetIntDefault(struct X400msSession *sp, int paramtype, int value)
Set a default integer parameter value in a session.
int X400msMsgSend(struct X400msMessage *mp)
Send message object.
int X400msRecipGetIntParam(struct X400Recipient *rp, int paramtype, int *valp)
Return a integer-valued parameter from the recipient object.
int X400msMsgDelete(struct X400msMessage *mp, int retain)
Delete message object.
int X400msMsgAddAttachment(struct X400msMessage *mp, int type, const char *string, size_t length)
Add attachment to the message.
int X400msMsgNew(struct X400msSession *sp, int type, struct X400msMessage **mpp)
Creates new message.
int X400msClose(struct X400msSession *sp)
Close a X400 Session.
int X400msSetStrDefault(struct X400msSession *sp, int paramtype, const char *value, size_t length)
Set a default string parameter value in a session.
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.
int X400msMsgGetIntParam(struct X400msMessage *mp, int paramtype, int *valp)
Return a integer-valued parameter from the message object.
#define X400_S_DIRECTORY_NAME
#define X400_S_OR_ADDRESS
#define X400_B_RETURN_VERIFICATION_ERRORS
#define X400_S_LOG_CONFIGURATION_FILE
#define X400_S_MESSAGE_DELIVERY_TIME
#define X400_S_CONTENT_IDENTIFIER
#define X400_S_MESSAGE_IDENTIFIER
#define X400_S_SECURITY_LABEL
#define X400_E_X509_CERT_INVALID
#define X400_E_X509_VERIFY_FAIL
#define X400_E_SIGN_NO_IDENTITY
#define X400_E_X509_ITEM_INVALID
#define X400_E_INVALID_ATTR
#define X400_E_X509_VERIFY_FAIL_NO_CERT
#define X400_E_X509_VERIFY_FAIL_UNSUPPORTED_ALG
#define X400_E_X509_VERIFY_FAIL_NO_PUBKEY
#define X400_E_X509_VERIFY_FAIL_INCOMPAT_ALG
#define X400_N_REPORT_REQUEST
#define X400_N_NOTIFICATION_REQUEST
#define X400_RECIP_PRIMARY
#define X400_RECIP_STANDARD
#define X400_RECIP_REPORT
#define X400_S_SUPPLEMENTARY_INFO
#define X400_S_SUBJECT_IDENTIFIER
#define X400_N_NON_DELIVERY_REASON
#define X400_N_NON_DELIVERY_DIAGNOSTIC
#define X400_N_S4406_STATUS
#define X400_N_S4406_CERTIFICATE
#define X400_N_MOAC_STATUS
#define X400_S_SEC_IDENTITY_DN
#define X400_B_SEC_GEN_MOAC
#define X400_S_SEC_IDENTITY_FILE
#define X400_S_SEC_TRUSTED_CERTS_DIR
#define X400_S_S4406_SIGNING_TIME
#define X400_S_SEC_IDENTITY
#define X400_S_S4406_SECURITY_LABEL
#define X400_S_SEC_IDENTITY_PASSPHRASE
X400 MA/MS (P3/P7) Interface.