security/electronic_signatures: UJO_ES_ENHANCEMENTS_1P0.KID

File UJO_ES_ENHANCEMENTS_1P0.KID, 39.1 KB (added by Sam Habiel, 11 years ago)

KIDS build for the changes

Line 
1KIDS Distribution saved on Mar 01, 2013@10:40:18
2ES AND ENCRYPTION ENHANCEMENTS
3**KIDS**:UJO ES ENHANCEMENTS 1.0^
4
5**INSTALL NAME**
6UJO ES ENHANCEMENTS 1.0
7"BLD",8502,0)
8UJO ES ENHANCEMENTS 1.0^^0^3130301^n
9"BLD",8502,1,0)
10^^18^18^3130301^
11"BLD",8502,1,1,0)
12Created by VISTA Expertise Network for EHS in February 2013. Funded by
13"BLD",8502,1,2,0)
14EHS.
15"BLD",8502,1,3,0)
16
17"BLD",8502,1,4,0)
18Contains Electronic Signature and Encryption/Decryption enhancements.
19"BLD",8502,1,5,0)
20
21"BLD",8502,1,6,0)
22THIS IS NOT A TURN-KEY PACKAGE. SEVERAL THINGS NEED TO BE DONE BEFORE YOU
23"BLD",8502,1,7,0)
24CAN USE THIS ON A PRODUCTION SYSTEM:
25"BLD",8502,1,8,0)
26* Hash the electronic signatures
27"BLD",8502,1,9,0)
28* Convert the unencrypted data in the fields that are supposed to be
29"BLD",8502,1,10,0)
30encrypted to encrypted using the encryption algorithm.
31"BLD",8502,1,11,0)
32* Expand the fields that will store the encrypted data as encrypted data
33"BLD",8502,1,12,0)
34is typically 75% larger.
35"BLD",8502,1,13,0)
36
37"BLD",8502,1,14,0)
38Example conversion for the hashing of electronic signatures and
39"BLD",8502,1,15,0)
40encrypting data is in UJOESCON.
41"BLD",8502,1,16,0)
42
43"BLD",8502,1,17,0)
44Documentation located at
45"BLD",8502,1,18,0)
46https://trac.opensourcevista.net/wiki/security/electronic_signatures
47"BLD",8502,4,0)
48^9.64PA^8925^4
49"BLD",8502,4,8925,0)
508925
51"BLD",8502,4,8925,2,0)
52^9.641^8925^1
53"BLD",8502,4,8925,2,8925,0)
54TIU DOCUMENT (File-top level)
55"BLD",8502,4,8925,2,8925,1,0)
56^9.6411^1510^4
57"BLD",8502,4,8925,2,8925,1,1503,0)
58SIGNATURE BLOCK NAME
59"BLD",8502,4,8925,2,8925,1,1504,0)
60SIGNATURE BLOCK TITLE
61"BLD",8502,4,8925,2,8925,1,1509,0)
62COSIGNATURE BLOCK NAME
63"BLD",8502,4,8925,2,8925,1,1510,0)
64COSIGNATURE BLOCK TITLE
65"BLD",8502,4,8925,222)
66y^y^p^^^^n^^n
67"BLD",8502,4,8925,224)
68
69"BLD",8502,4,400000001.1,0)
70400000001.1
71"BLD",8502,4,400000001.1,222)
72y^y^f^^n^^y^o^n
73"BLD",8502,4,400000001.2,0)
74400000001.2
75"BLD",8502,4,400000001.2,222)
76y^y^f^^n^^y^o^n
77"BLD",8502,4,400000001.3,0)
78400000001.3
79"BLD",8502,4,400000001.3,222)
80y^y^f^^n^^y^o^n
81"BLD",8502,4,"APDD",8925,8925)
82
83"BLD",8502,4,"APDD",8925,8925,1503)
84
85"BLD",8502,4,"APDD",8925,8925,1504)
86
87"BLD",8502,4,"APDD",8925,8925,1509)
88
89"BLD",8502,4,"APDD",8925,8925,1510)
90
91"BLD",8502,4,"B",8925,8925)
92
93"BLD",8502,4,"B",400000001.1,400000001.1)
94
95"BLD",8502,4,"B",400000001.2,400000001.2)
96
97"BLD",8502,4,"B",400000001.3,400000001.3)
98
99"BLD",8502,6.3)
1004
101"BLD",8502,"KRN",0)
102^9.67PA^779.2^20
103"BLD",8502,"KRN",.4,0)
104.4
105"BLD",8502,"KRN",.401,0)
106.401
107"BLD",8502,"KRN",.402,0)
108.402
109"BLD",8502,"KRN",.403,0)
110.403
111"BLD",8502,"KRN",.5,0)
112.5
113"BLD",8502,"KRN",.84,0)
114.84
115"BLD",8502,"KRN",3.6,0)
1163.6
117"BLD",8502,"KRN",3.8,0)
1183.8
119"BLD",8502,"KRN",9.2,0)
1209.2
121"BLD",8502,"KRN",9.8,0)
1229.8
123"BLD",8502,"KRN",9.8,"NM",0)
124^9.68A^4^4
125"BLD",8502,"KRN",9.8,"NM",1,0)
126UJOSHSHP^^0^B32560742
127"BLD",8502,"KRN",9.8,"NM",2,0)
128UJOXCALL^^0^B2632097
129"BLD",8502,"KRN",9.8,"NM",3,0)
130UJOESCON^^0^B7034342
131"BLD",8502,"KRN",9.8,"NM",4,0)
132XUSHSHP^^0^B154851
133"BLD",8502,"KRN",9.8,"NM","B","UJOESCON",3)
134
135"BLD",8502,"KRN",9.8,"NM","B","UJOSHSHP",1)
136
137"BLD",8502,"KRN",9.8,"NM","B","UJOXCALL",2)
138
139"BLD",8502,"KRN",9.8,"NM","B","XUSHSHP",4)
140
141"BLD",8502,"KRN",19,0)
14219
143"BLD",8502,"KRN",19.1,0)
14419.1
145"BLD",8502,"KRN",101,0)
146101
147"BLD",8502,"KRN",409.61,0)
148409.61
149"BLD",8502,"KRN",771,0)
150771
151"BLD",8502,"KRN",779.2,0)
152779.2
153"BLD",8502,"KRN",870,0)
154870
155"BLD",8502,"KRN",8989.51,0)
1568989.51
157"BLD",8502,"KRN",8989.52,0)
1588989.52
159"BLD",8502,"KRN",8994,0)
1608994
161"BLD",8502,"KRN","B",.4,.4)
162
163"BLD",8502,"KRN","B",.401,.401)
164
165"BLD",8502,"KRN","B",.402,.402)
166
167"BLD",8502,"KRN","B",.403,.403)
168
169"BLD",8502,"KRN","B",.5,.5)
170
171"BLD",8502,"KRN","B",.84,.84)
172
173"BLD",8502,"KRN","B",3.6,3.6)
174
175"BLD",8502,"KRN","B",3.8,3.8)
176
177"BLD",8502,"KRN","B",9.2,9.2)
178
179"BLD",8502,"KRN","B",9.8,9.8)
180
181"BLD",8502,"KRN","B",19,19)
182
183"BLD",8502,"KRN","B",19.1,19.1)
184
185"BLD",8502,"KRN","B",101,101)
186
187"BLD",8502,"KRN","B",409.61,409.61)
188
189"BLD",8502,"KRN","B",771,771)
190
191"BLD",8502,"KRN","B",779.2,779.2)
192
193"BLD",8502,"KRN","B",870,870)
194
195"BLD",8502,"KRN","B",8989.51,8989.51)
196
197"BLD",8502,"KRN","B",8989.52,8989.52)
198
199"BLD",8502,"KRN","B",8994,8994)
200
201"BLD",8502,"QDEF")
202^^^^YES
203"BLD",8502,"QUES",0)
204^9.62^^
205"BLD",8502,"REQB",0)
206^9.611^^
207"DATA",400000001.1,1,0)
208HASH/DIGEST^1^3130225^EHS/SW
209"DATA",400000001.1,1,1,0)
210^400000001.11^1^1
211"DATA",400000001.1,1,1,1,0)
212X^1^String to hash
213"DATA",400000001.1,1,2)
214S X=$$UP^XLFSTR(X)
215"DATA",400000001.1,1,3,0)
216^^2^2^3130225^
217"DATA",400000001.1,1,3,1,0)
218Function provides functionality of a password hash so that the original password cannot be decrypted from the hash.
219"DATA",400000001.1,1,3,2,0)
220See http://crackstation.net/hashing-security.htm
221"DATA",400000001.1,2,0)
222ENCRYPT STRING^1^3130225^EHS/SW
223"DATA",400000001.1,2,1,0)
224^400000001.11^3^3
225"DATA",400000001.1,2,1,1,0)
226X^1^String to be encrypted
227"DATA",400000001.1,2,1,2,0)
228X1^1^encryption salt/password
229"DATA",400000001.1,2,1,3,0)
230X2^1^encryption salt/password
231"DATA",400000001.1,2,2)
232Q
233"DATA",400000001.1,2,3,0)
234^21614.13^3^3^3130225^^
235"DATA",400000001.1,2,3,1,0)
236Encrypts data using a password/salt
237"DATA",400000001.1,2,3,2,0)
238The variables X1 and X2 are values to be decided upon by the programmer
239"DATA",400000001.1,2,3,3,0)
240calling this utility.
241"DATA",400000001.1,3,0)
242DECRYPT STRING^1^3130225^EHS/SW
243"DATA",400000001.1,3,1,0)
244^400000001.11^3^3
245"DATA",400000001.1,3,1,1,0)
246X^1^Encrypted string to be decrypted
247"DATA",400000001.1,3,1,2,0)
248X1^1^Encryption salt/password
249"DATA",400000001.1,3,1,3,0)
250X2^1^Encryption salt/password
251"DATA",400000001.1,3,2)
252Q
253"DATA",400000001.1,3,3,0)
254^^3^3^3130225^
255"DATA",400000001.1,3,3,1,0)
256Decrypts encrypted text using X1 and X2.
257"DATA",400000001.1,3,3,2,0)
258If X1 and X2 are different from what was used to encrypt the string,
259"DATA",400000001.1,3,3,3,0)
260the encryption will fail.
261"DATA",400000001.1,4,0)
262UNIT TEST ENTRY^1^3130226^TESTING
263"DATA",400000001.1,4,2)
264S X="HELLO WORLD"
265"DATA",400000001.2,1,0)
266KERNEL
267"DATA",400000001.3,1,0)
2681
269"DATA",400000001.3,1,1)
270D HASH^UJOSHSHP
271"DATA",400000001.3,2,0)
2722
273"DATA",400000001.3,2,1)
274D EN^UJOSHSHP
275"DATA",400000001.3,3,0)
2763
277"DATA",400000001.3,3,1)
278D DE^UJOSHSHP
279"FIA",8925)
280TIU DOCUMENT
281"FIA",8925,0)
282^TIU(8925,
283"FIA",8925,0,0)
2848925IsP
285"FIA",8925,0,1)
286y^y^p^^^^n^^n
287"FIA",8925,0,10)
288
289"FIA",8925,0,11)
290
291"FIA",8925,0,"RLRO")
292
293"FIA",8925,8925)
2941
295"FIA",8925,8925,1503)
296
297"FIA",8925,8925,1504)
298
299"FIA",8925,8925,1509)
300
301"FIA",8925,8925,1510)
302
303"FIA",400000001.1)
304UJO SUPPORTED API
305"FIA",400000001.1,0)
306^UJO(400000001.1,
307"FIA",400000001.1,0,0)
308400000001.1
309"FIA",400000001.1,0,1)
310y^y^f^^n^^y^o^n
311"FIA",400000001.1,0,10)
312
313"FIA",400000001.1,0,11)
314
315"FIA",400000001.1,0,"RLRO")
316
317"FIA",400000001.1,400000001.1)
3180
319"FIA",400000001.1,400000001.11)
3200
321"FIA",400000001.1,400000001.13)
3220
323"FIA",400000001.2)
324UJO SUPPORTED API GROUP
325"FIA",400000001.2,0)
326^UJO(400000001.2,
327"FIA",400000001.2,0,0)
328400000001.2
329"FIA",400000001.2,0,1)
330y^y^f^^n^^y^o^n
331"FIA",400000001.2,0,10)
332
333"FIA",400000001.2,0,11)
334
335"FIA",400000001.2,0,"RLRO")
336
337"FIA",400000001.2,400000001.2)
3380
339"FIA",400000001.3)
340UJO IMPLEMENTATION-SPECIFIC API
341"FIA",400000001.3,0)
342^UJO(400000001.3,
343"FIA",400000001.3,0,0)
344400000001.3P
345"FIA",400000001.3,0,1)
346y^y^f^^n^^y^o^n
347"FIA",400000001.3,0,10)
348
349"FIA",400000001.3,0,11)
350
351"FIA",400000001.3,0,"RLRO")
352
353"FIA",400000001.3,400000001.3)
3540
355"FIA",400000001.3,400000001.32)
3560
357"FIA",400000001.3,400000001.39)
3580
359"MBREQ")
3600
361"QUES","XPF1",0)
362Y
363"QUES","XPF1","??")
364^D REP^XPDH
365"QUES","XPF1","A")
366Shall I write over your |FLAG| File
367"QUES","XPF1","B")
368YES
369"QUES","XPF1","M")
370D XPF1^XPDIQ
371"QUES","XPF2",0)
372Y
373"QUES","XPF2","??")
374^D DTA^XPDH
375"QUES","XPF2","A")
376Want my data |FLAG| yours
377"QUES","XPF2","B")
378YES
379"QUES","XPF2","M")
380D XPF2^XPDIQ
381"QUES","XPI1",0)
382YO
383"QUES","XPI1","??")
384^D INHIBIT^XPDH
385"QUES","XPI1","A")
386Want KIDS to INHIBIT LOGONs during the install
387"QUES","XPI1","B")
388YES
389"QUES","XPI1","M")
390D XPI1^XPDIQ
391"QUES","XPM1",0)
392PO^VA(200,:EM
393"QUES","XPM1","??")
394^D MG^XPDH
395"QUES","XPM1","A")
396Enter the Coordinator for Mail Group '|FLAG|'
397"QUES","XPM1","B")
398
399"QUES","XPM1","M")
400D XPM1^XPDIQ
401"QUES","XPO1",0)
402Y
403"QUES","XPO1","??")
404^D MENU^XPDH
405"QUES","XPO1","A")
406Want KIDS to Rebuild Menu Trees Upon Completion of Install
407"QUES","XPO1","B")
408NO
409"QUES","XPO1","M")
410D XPO1^XPDIQ
411"QUES","XPZ1",0)
412Y
413"QUES","XPZ1","??")
414^D OPT^XPDH
415"QUES","XPZ1","A")
416Want to DISABLE Scheduled Options, Menu Options, and Protocols
417"QUES","XPZ1","B")
418NO
419"QUES","XPZ1","M")
420D XPZ1^XPDIQ
421"QUES","XPZ2",0)
422Y
423"QUES","XPZ2","??")
424^D RTN^XPDH
425"QUES","XPZ2","A")
426Want to MOVE routines to other CPUs
427"QUES","XPZ2","B")
428NO
429"QUES","XPZ2","M")
430D XPZ2^XPDIQ
431"RTN")
4324
433"RTN","UJOESCON")
4340^3^B7034342
435"RTN","UJOESCON",1,0)
436UJOESCON ; VEN/SMH - Convert ES and Encryptions/Decryptions;2013-02-27 11:47 AM
437"RTN","UJOESCON",2,0)
438 ;;1.0;JORDAN SPECIFIC MODIFICATIONS;;;Build 4
439"RTN","UJOESCON",3,0)
440 N DIQUIET S DIQUIET=1 D DT^DICRW
441"RTN","UJOESCON",4,0)
442 ;
443"RTN","UJOESCON",5,0)
444 W "WARNING: This program cannot be run more than once. Running it again is",!
445"RTN","UJOESCON",6,0)
446 W "destructive",!!
447"RTN","UJOESCON",7,0)
448 W "There should be no users on the system when this executes.",!!
449"RTN","UJOESCON",8,0)
450 ;
451"RTN","UJOESCON",9,0)
452 N DIR,X,Y,DTOUT,DUOUT,DIRUT,DIROUT,DA
453"RTN","UJOESCON",10,0)
454 S DIR(0)="Y",DIR("A")="Do you want to continue" D ^DIR
455"RTN","UJOESCON",11,0)
456 QUIT:'$G(Y)
457"RTN","UJOESCON",12,0)
458 ;
459"RTN","UJOESCON",13,0)
460 D NP,TIU Q
461"RTN","UJOESCON",14,0)
462 ;
463"RTN","UJOESCON",15,0)
464NP ; New Person File electronic signature conversion from plain text to hashed.
465"RTN","UJOESCON",16,0)
466 W !,"Hashing electronic signatures",!
467"RTN","UJOESCON",17,0)
468 N DUZ ; Needed for the hashing algorithm
469"RTN","UJOESCON",18,0)
470 N I S I=0 F S I=$O(^VA(200,I)) Q:'I D ; for each NP
471"RTN","UJOESCON",19,0)
472 . N OLDES S OLDES=$P($G(^VA(200,I,20)),U,4) ; Get old signature
473"RTN","UJOESCON",20,0)
474 . Q:'$L(OLDES) ; quit if it doesn't exist.
475"RTN","UJOESCON",21,0)
476 . W I_" "
477"RTN","UJOESCON",22,0)
478 . S DUZ=I ; DUZ is a hash salt
479"RTN","UJOESCON",23,0)
480 . N X S X=OLDES D HASH^XUSHSHP ; hash old sig
481"RTN","UJOESCON",24,0)
482 . S $P(^VA(200,I,20),U,4)=X ; store result
483"RTN","UJOESCON",25,0)
484 W !
485"RTN","UJOESCON",26,0)
486 QUIT
487"RTN","UJOESCON",27,0)
488 ;
489"RTN","UJOESCON",28,0)
490TIU ; Encrypt Signatures for TIU documents; from plain text to encrypted.
491"RTN","UJOESCON",29,0)
492 W !,"Encrypting Signature Names and Titles in TIU Documents",!
493"RTN","UJOESCON",30,0)
494 K ^TMP($J,"UJOFDA") ; FDA Array
495"RTN","UJOESCON",31,0)
496 N I S I=0 F S I=$O(^TIU(8925,I)) Q:'I D ; for each document
497"RTN","UJOESCON",32,0)
498 . N SB S SB=$G(^(I,15)) ; Get signature block **NAKED**
499"RTN","UJOESCON",33,0)
500 . Q:SB=""
501"RTN","UJOESCON",34,0)
502 . W I_" "
503"RTN","UJOESCON",35,0)
504 . ; We get the following fields:
505"RTN","UJOESCON",36,0)
506 . ; - 1503 SIGNATURE BLOCK NAME (FOX), [15;3]
507"RTN","UJOESCON",37,0)
508 . ; - 1504 SIGNATURE BLOCK TITLE (FOX), [15;4]
509"RTN","UJOESCON",38,0)
510 . ; - 1509 COSIGNATURE BLOCK NAME (FXO), [15;9]
511"RTN","UJOESCON",39,0)
512 . ; - 1510 COSIGNATURE BLOCK TITLE (FXO), [15;10]
513"RTN","UJOESCON",40,0)
514 . N F1503,F1504,F1509,F1510 ; encrypted pieces now in plain text
515"RTN","UJOESCON",41,0)
516 . S F1503=$P(SB,U,3),F1504=$P(SB,U,4),F1509=$P(SB,U,9),F1510=$P(SB,U,10) ; get text values
517"RTN","UJOESCON",42,0)
518 . ;
519"RTN","UJOESCON",43,0)
520 . ; Store in FDA.
521"RTN","UJOESCON",44,0)
522 . S:$L(F1503) ^TMP($J,"UJOFDA",8925,I_",",1503)=F1503
523"RTN","UJOESCON",45,0)
524 . S:$L(F1504) ^TMP($J,"UJOFDA",8925,I_",",1504)=F1504
525"RTN","UJOESCON",46,0)
526 . S:$L(F1509) ^TMP($J,"UJOFDA",8925,I_",",1509)=F1509
527"RTN","UJOESCON",47,0)
528 . S:$L(F1510) ^TMP($J,"UJOFDA",8925,I_",",1510)=F1510
529"RTN","UJOESCON",48,0)
530 ;
531"RTN","UJOESCON",49,0)
532 D CLEAN^DILF ; clean up variables
533"RTN","UJOESCON",50,0)
534 D WAIT^DICD ; Please wait a while
535"RTN","UJOESCON",51,0)
536 D FILE^DIE("ET",$NA(^TMP($J,"UJOFDA"))) ; External Values, Transaction
537"RTN","UJOESCON",52,0)
538 ; ZEXCEPT: DIERR ; Fileman variable cleaned in CLEAN^DILF call
539"RTN","UJOESCON",53,0)
540 I $D(DIERR) W "An error occured",! S $EC=",U1,"
541"RTN","UJOESCON",54,0)
542 W !!
543"RTN","UJOESCON",55,0)
544 QUIT
545"RTN","UJOSHSHP")
5460^1^B32560742
547"RTN","UJOSHSHP",1,0)
548UJOSHSHP ; VEN/SMH - Encrypt Data a la XUSHSHP ;2013-02-27 9:44 AM
549"RTN","UJOSHSHP",2,0)
550 ;;1.0;JORDAN SPECIFIC MODIFICATIONS;;;Build 4
551"RTN","UJOSHSHP",3,0)
552 ;
553"RTN","UJOSHSHP",4,0)
554HASH ; HASH
555"RTN","UJOSHSHP",5,0)
556 Q:'$D(X) Q:'$L(X)
557"RTN","UJOSHSHP",6,0)
558 ; Input: X from Symbol Table. X can be any length
559"RTN","UJOSHSHP",7,0)
560 ; Output: X hashed, as 20 characters
561"RTN","UJOSHSHP",8,0)
562 ;
563"RTN","UJOSHSHP",9,0)
564 ; Use sha512 with user stuff as salt
565"RTN","UJOSHSHP",10,0)
566 ; Should use PBKDF2, bcrypt, or scrypt; but not available in openssl CLI.
567"RTN","UJOSHSHP",11,0)
568 S X=$$UP^XLFSTR(X) ; Uppercase X; per original VA code.
569"RTN","UJOSHSHP",12,0)
570 N SALTED S SALTED=$P(^VA(200,DUZ,1),U,7)_X_DUZ ; Salt X with User Creation Date and DUZ.
571"RTN","UJOSHSHP",13,0)
572 N CALL S CALL="openssl dgst -sha512" ; SHA512 OS call
573"RTN","UJOSHSHP",14,0)
574 N DEVICE S DEVICE="hashPipe"
575"RTN","UJOSHSHP",15,0)
576 N OUTPUT
577"RTN","UJOSHSHP",16,0)
578 N OLDIO S OLDIO=$IO
579"RTN","UJOSHSHP",17,0)
580 OPEN DEVICE:(shell="/bin/sh":comm=CALL)::"PIPE"
581"RTN","UJOSHSHP",18,0)
582 USE DEVICE WRITE SALTED,/EOF READ OUTPUT:1 U OLDIO CLOSE DEVICE
583"RTN","UJOSHSHP",19,0)
584 S X=$E(OUTPUT,$L(OUTPUT)-19,$L(OUTPUT)) ; X is the return variable; only 20 characters long
585"RTN","UJOSHSHP",20,0)
586 QUIT
587"RTN","UJOSHSHP",21,0)
588 ;
589"RTN","UJOSHSHP",22,0)
590EN ; ENCRYPT
591"RTN","UJOSHSHP",23,0)
592 Q:'$D(X)!('$D(X1))!('$D(X2)) Q:'$L(X)
593"RTN","UJOSHSHP",24,0)
594 ; Expect X, X1, X2
595"RTN","UJOSHSHP",25,0)
596 ; X is the string to encrypt. X1 and X2 are salts/password
597"RTN","UJOSHSHP",26,0)
598 ; X1 can be the DUZ
599"RTN","UJOSHSHP",27,0)
600 ; X2 can be the checksum of the text to encrypt
601"RTN","UJOSHSHP",28,0)
602 ; Output: X, the encrypted string. Length is the same the input.
603"RTN","UJOSHSHP",29,0)
604 ; Maximum supported length is maximum global node length.
605"RTN","UJOSHSHP",30,0)
606 ; Encrypting word processing fields is not supported.
607"RTN","UJOSHSHP",31,0)
608 ;
609"RTN","UJOSHSHP",32,0)
610 ; AES- Cipher Block Chaining with Base 64 encoding with password w no salt.
611"RTN","UJOSHSHP",33,0)
612 N CALL S CALL="openssl enc -a -aes-256-cbc -nosalt -pass pass:"_X1_X2
613"RTN","UJOSHSHP",34,0)
614 ; N CALL S CALL="openssl enc -a -des-ede3-cbc -nosalt -pass pass:"_X1_X2
615"RTN","UJOSHSHP",35,0)
616 ; N CALL S CALL="openssl enc -bf-cbc -nosalt -pass pass:"_X1_X2
617"RTN","UJOSHSHP",36,0)
618 ; N CALL S CALL="openssl enc -a -rc4 -nosalt -pass pass:"_X1_X2
619"RTN","UJOSHSHP",37,0)
620 N DEVICE S DEVICE="encryptionPipe"
621"RTN","UJOSHSHP",38,0)
622 N OLDIO S OLDIO=$IO
623"RTN","UJOSHSHP",39,0)
624 OPEN DEVICE:(shell="/bin/sh":comm=CALL)::"PIPE"
625"RTN","UJOSHSHP",40,0)
626 USE DEVICE
627"RTN","UJOSHSHP",41,0)
628 WRITE X,/EOF ; Write the string to encrypt
629"RTN","UJOSHSHP",42,0)
630 N I,OUTPUT ; I = counter. OUTPUT = encyrpted tems
631"RTN","UJOSHSHP",43,0)
632 FOR I=1:1 READ OUTPUT(I) Q:$ZEOF ; Read it into Output Array
633"RTN","UJOSHSHP",44,0)
634 U OLDIO
635"RTN","UJOSHSHP",45,0)
636 CLOSE DEVICE
637"RTN","UJOSHSHP",46,0)
638 ; Next two lines: concatentate the array into the root node
639"RTN","UJOSHSHP",47,0)
640 S OUTPUT=""
641"RTN","UJOSHSHP",48,0)
642 F I=1:1 Q:'$D(OUTPUT(I)) S OUTPUT=OUTPUT_OUTPUT(I) K OUTPUT(I)
643"RTN","UJOSHSHP",49,0)
644 ; X is the output from the API
645"RTN","UJOSHSHP",50,0)
646 S X=OUTPUT
647"RTN","UJOSHSHP",51,0)
648 QUIT
649"RTN","UJOSHSHP",52,0)
650 ;
651"RTN","UJOSHSHP",53,0)
652DE ; DECRYPT
653"RTN","UJOSHSHP",54,0)
654 Q:'$D(X)!('$D(X1))!('$D(X2)) Q:'$L(X)
655"RTN","UJOSHSHP",55,0)
656 ; Expect X, X1, X2
657"RTN","UJOSHSHP",56,0)
658 ; X is the string to encrypt. X1 and X2 are salts/password
659"RTN","UJOSHSHP",57,0)
660 ; X1 can be the DUZ
661"RTN","UJOSHSHP",58,0)
662 ; X2 can be the checksum of the text to encrypt
663"RTN","UJOSHSHP",59,0)
664 ; Output: X, the decrypted string. Length is the same the input.
665"RTN","UJOSHSHP",60,0)
666 ; Maximum supported length is maximum global node length.
667"RTN","UJOSHSHP",61,0)
668 ; Encrypting word processing fields is not supported.
669"RTN","UJOSHSHP",62,0)
670 N CALL S CALL="openssl enc -d -a -aes-256-cbc -nosalt -pass pass:"_X1_X2
671"RTN","UJOSHSHP",63,0)
672 ; N CALL S CALL="openssl enc -a -d -rc4 -nosalt -pass pass:"_X1_X2
673"RTN","UJOSHSHP",64,0)
674 N DEVICE S DEVICE="decryptionPipe"
675"RTN","UJOSHSHP",65,0)
676 N OLDIO S OLDIO=$IO
677"RTN","UJOSHSHP",66,0)
678 OPEN DEVICE:(shell="/bin/sh":comm=CALL)::"PIPE"
679"RTN","UJOSHSHP",67,0)
680 USE DEVICE
681"RTN","UJOSHSHP",68,0)
682 F W $E(X,1,64),! S X=$E(X,65,1024*1024*1024) Q:X="" ; Write Input base64 style
683"RTN","UJOSHSHP",69,0)
684 WRITE /EOF
685"RTN","UJOSHSHP",70,0)
686 N OUTPUT R OUTPUT:1 ; Read Output of decryption back.
687"RTN","UJOSHSHP",71,0)
688 U OLDIO
689"RTN","UJOSHSHP",72,0)
690 CLOSE DEVICE
691"RTN","UJOSHSHP",73,0)
692 S X=OUTPUT ; X is output
693"RTN","UJOSHSHP",74,0)
694 QUIT
695"RTN","UJOSHSHP",75,0)
696 ;
697"RTN","UJOSHSHP",76,0)
698RUNTESTS S IO=$P S DIQUIET=1 D DT^DICRW D:$L($T(EN^XTMUNIT)) EN^XTMUNIT($T(+0),1) QUIT
699"RTN","UJOSHSHP",77,0)
700THASH ; @TEST - Test Hashing
701"RTN","UJOSHSHP",78,0)
702 N DUZ
703"RTN","UJOSHSHP",79,0)
704 S DUZ=1 N X S X="HELLO WORLD" D HASH
705"RTN","UJOSHSHP",80,0)
706 N RESULT1 S RESULT1=X
707"RTN","UJOSHSHP",81,0)
708 S DUZ=1 N X S X="HELLO WORLD" D HASH
709"RTN","UJOSHSHP",82,0)
710 N RESULT2 S RESULT2=X
711"RTN","UJOSHSHP",83,0)
712 D CHKEQ^XTMUNIT(RESULT1,RESULT2,"Hash results are not equal")
713"RTN","UJOSHSHP",84,0)
714 ;
715"RTN","UJOSHSHP",85,0)
716 S DUZ=1 N X S X="HELLO WORLD" D HASH
717"RTN","UJOSHSHP",86,0)
718 N RESULT1 S RESULT1=X
719"RTN","UJOSHSHP",87,0)
720 S DUZ=2 N X S X="HELLO WORLD" D HASH
721"RTN","UJOSHSHP",88,0)
722 N RESULT2 S RESULT2=X
723"RTN","UJOSHSHP",89,0)
724 D CHKTF^XTMUNIT(RESULT1'=RESULT2,"Hash results are not supposed to be equal")
725"RTN","UJOSHSHP",90,0)
726 ;
727"RTN","UJOSHSHP",91,0)
728 S DUZ=1
729"RTN","UJOSHSHP",92,0)
730 N X S X="Hello World" D HASH
731"RTN","UJOSHSHP",93,0)
732 N RESULT1 S RESULT1=X
733"RTN","UJOSHSHP",94,0)
734 N X S X="HELLO WORLD" D HASH
735"RTN","UJOSHSHP",95,0)
736 N RESULT2 S RESULT2=X
737"RTN","UJOSHSHP",96,0)
738 D CHKEQ^XTMUNIT(RESULT1,RESULT2,"Hash results of different cases aren't equal")
739"RTN","UJOSHSHP",97,0)
740 QUIT
741"RTN","UJOSHSHP",98,0)
742 ;
743"RTN","UJOSHSHP",99,0)
744THASH2 ; @TEST - Test Hashing using main calling routine XUSHSHP
745"RTN","UJOSHSHP",100,0)
746 N DUZ
747"RTN","UJOSHSHP",101,0)
748 S DUZ=1 N X S X="HELLO WORLD" D HASH^XUSHSHP
749"RTN","UJOSHSHP",102,0)
750 N RESULT1 S RESULT1=X
751"RTN","UJOSHSHP",103,0)
752 S DUZ=1 N X S X="HELLO WORLD" D HASH^XUSHSHP
753"RTN","UJOSHSHP",104,0)
754 N RESULT2 S RESULT2=X
755"RTN","UJOSHSHP",105,0)
756 D CHKEQ^XTMUNIT(RESULT1,RESULT2,"Hash results are not equal")
757"RTN","UJOSHSHP",106,0)
758 ;
759"RTN","UJOSHSHP",107,0)
760 S DUZ=1 N X S X="HELLO WORLD" D HASH^XUSHSHP
761"RTN","UJOSHSHP",108,0)
762 N RESULT1 S RESULT1=X
763"RTN","UJOSHSHP",109,0)
764 S DUZ=2 N X S X="HELLO WORLD" D HASH^XUSHSHP
765"RTN","UJOSHSHP",110,0)
766 N RESULT2 S RESULT2=X
767"RTN","UJOSHSHP",111,0)
768 D CHKTF^XTMUNIT(RESULT1'=RESULT2,"Hash results are not supposed to be equal")
769"RTN","UJOSHSHP",112,0)
770 ;
771"RTN","UJOSHSHP",113,0)
772 S DUZ=1
773"RTN","UJOSHSHP",114,0)
774 N X S X="Hello World" D HASH^XUSHSHP
775"RTN","UJOSHSHP",115,0)
776 N RESULT1 S RESULT1=X
777"RTN","UJOSHSHP",116,0)
778 N X S X="HELLO WORLD" D HASH^XUSHSHP
779"RTN","UJOSHSHP",117,0)
780 N RESULT2 S RESULT2=X
781"RTN","UJOSHSHP",118,0)
782 D CHKEQ^XTMUNIT(RESULT1,RESULT2,"Hash results of different cases aren't equal")
783"RTN","UJOSHSHP",119,0)
784 QUIT
785"RTN","UJOSHSHP",120,0)
786 ;
787"RTN","UJOSHSHP",121,0)
788TENC ; @TEST - Test Encryption
789"RTN","UJOSHSHP",122,0)
790 N VALUE S VALUE="Mary has a little lamb"
791"RTN","UJOSHSHP",123,0)
792 S X=VALUE,X1=1,X2=234234234
793"RTN","UJOSHSHP",124,0)
794 D EN,DE ; encrypt, decrypt X
795"RTN","UJOSHSHP",125,0)
796 D CHKEQ^XTMUNIT(VALUE,X,"Encryption and decryption didn't happen properly")
797"RTN","UJOSHSHP",126,0)
798 ;
799"RTN","UJOSHSHP",127,0)
800 N VALUE2 S VALUE2="Mary has a little lamb"
801"RTN","UJOSHSHP",128,0)
802 S X=VALUE2,X1=88,X2=234234234
803"RTN","UJOSHSHP",129,0)
804 D EN ; encrypt
805"RTN","UJOSHSHP",130,0)
806 N ENCSTR1 S ENCSTR1=X
807"RTN","UJOSHSHP",131,0)
808 S X=VALUE2,X1=1,X2=234234234 ; Different X1
809"RTN","UJOSHSHP",132,0)
810 D EN ; encrypt
811"RTN","UJOSHSHP",133,0)
812 N ENCSTR2 S ENCSTR2=X
813"RTN","UJOSHSHP",134,0)
814 D CHKTF^XTMUNIT(ENCSTR1'=ENCSTR2,"Encrypted strings with different passwords are not supposed to be equal")
815"RTN","UJOSHSHP",135,0)
816 QUIT
817"RTN","UJOSHSHP",136,0)
818 ;
819"RTN","UJOSHSHP",137,0)
820TENC2 ; @TEST - Test Encryption by calling XUSHSHP
821"RTN","UJOSHSHP",138,0)
822 N VALUE S VALUE="Mary has a little lamb"
823"RTN","UJOSHSHP",139,0)
824 S X=VALUE,X1=1,X2=234234234
825"RTN","UJOSHSHP",140,0)
826 D EN^XUSHSHP,DE^XUSHSHP ; encrypt, decrypt X
827"RTN","UJOSHSHP",141,0)
828 D CHKEQ^XTMUNIT(VALUE,X,"Encryption and decryption didn't happen properly")
829"RTN","UJOSHSHP",142,0)
830 ;
831"RTN","UJOSHSHP",143,0)
832 N VALUE2 S VALUE2="Mary has a little lamb"
833"RTN","UJOSHSHP",144,0)
834 S X=VALUE2,X1=88,X2=234234234
835"RTN","UJOSHSHP",145,0)
836 D EN^XUSHSHP ; encrypt
837"RTN","UJOSHSHP",146,0)
838 N ENCSTR1 S ENCSTR1=X
839"RTN","UJOSHSHP",147,0)
840 S X=VALUE2,X1=1,X2=234234234 ; Different X1
841"RTN","UJOSHSHP",148,0)
842 D EN^XUSHSHP ; encrypt
843"RTN","UJOSHSHP",149,0)
844 N ENCSTR2 S ENCSTR2=X
845"RTN","UJOSHSHP",150,0)
846 D CHKTF^XTMUNIT(ENCSTR1'=ENCSTR2,"Encrypted strings with different passwords are not supposed to be equal")
847"RTN","UJOSHSHP",151,0)
848 QUIT
849"RTN","UJOSHSHP",152,0)
850LENGTH ; @TEST - Test Lengths
851"RTN","UJOSHSHP",153,0)
852 N X,X1,X2,I
853"RTN","UJOSHSHP",154,0)
854 S (X1,X2)=982734987234
855"RTN","UJOSHSHP",155,0)
856 W !
857"RTN","UJOSHSHP",156,0)
858 F I=1:1:60 K X S $P(X,"A",I)="A" W $L(X) D EN W ?30,$L(X),!
859"RTN","UJOSHSHP",157,0)
860 QUIT
861"RTN","UJOXCALL")
8620^2^B2632097
863"RTN","UJOXCALL",1,0)
864UJOXCALL ;VEN/SMH - External APIs call wrapper ;2013-02-26 3:38 PM
865"RTN","UJOXCALL",2,0)
866 ;;1.0;JORDAN SPECIFIC MODIFICATIONS;;;Build 4
867"RTN","UJOXCALL",3,0)
868 Q
869"RTN","UJOXCALL",4,0)
870X(APINAME) ; Private Proc; Call API based on files
871"RTN","UJOXCALL",5,0)
872 ; Input: APINAME, by Value. External API Name in file 400000001.1
873"RTN","UJOXCALL",6,0)
874 ; Output: None. Executes API. API determines Input and Output variables
875"RTN","UJOXCALL",7,0)
876 ;
877"RTN","UJOXCALL",8,0)
878 N IEN S IEN=$O(^UJO(400000001.1,"B",APINAME,"")) Q:'IEN ; IEN of API, DINUMMED in imp specific code file (400000001.3)
879"RTN","UJOXCALL",9,0)
880 I $L($G(^UJO(400000001.3,IEN,1))) X ^(1) QUIT ; Try Implementation specific first
881"RTN","UJOXCALL",10,0)
882 I $L($G(^UJO(400000001.1,IEN,2))) X ^(2) QUIT ; Otherwise, use default one
883"RTN","UJOXCALL",11,0)
884 ;
885"RTN","UJOXCALL",12,0)
886 ;
887"RTN","UJOXCALL",13,0)
888 ;
889"RTN","UJOXCALL",14,0)
890RUNTESTS I $L($T(EN^XTMUNIT)) S IO=$P,DIQUIET=1 D DT^DICRW,EN^XTMUNIT($T(+0),1) QUIT
891"RTN","UJOXCALL",15,0)
892TESTAPI ; @TEST - Test calling X(APINAME) with existent and non-existent entries.
893"RTN","UJOXCALL",16,0)
894 N X,X1,X2
895"RTN","UJOXCALL",17,0)
896 D X("UNIT TEST ENTRY")
897"RTN","UJOXCALL",18,0)
898 D CHKEQ^XTMUNIT(X,"HELLO WORLD","API wasn't called")
899"RTN","UJOXCALL",19,0)
900 ;
901"RTN","UJOXCALL",20,0)
902 N STR S STR="HELLO WORLD2"
903"RTN","UJOXCALL",21,0)
904 S X=STR,X1="LKJSDF",X2=23432
905"RTN","UJOXCALL",22,0)
906 D X("ENCRYPT STRING")
907"RTN","UJOXCALL",23,0)
908 D CHKTF^XTMUNIT(X'="HELLO WORLD2","Encrypt failed")
909"RTN","UJOXCALL",24,0)
910 D X("DECRYPT STRING")
911"RTN","UJOXCALL",25,0)
912 D CHKEQ^XTMUNIT(X,"HELLO WORLD2","Encrypt/Decrypt failed")
913"RTN","UJOXCALL",26,0)
914 ;
915"RTN","UJOXCALL",27,0)
916 D X("LKSJDKLFDF") ; Make sure there is no crash
917"RTN","UJOXCALL",28,0)
918 QUIT
919"RTN","XUSHSHP")
9200^4^B154851
921"RTN","XUSHSHP",1,0)
922XUSHSHP ;SF/STAFF - HASHING ROUTINE FOR SIG BLOCK IN FILE 200 ;2013-02-26 2:32 PM
923"RTN","XUSHSHP",2,0)
924 ;;8.0;KERNEL;;Jul 10, 1995;Build 4
925"RTN","XUSHSHP",3,0)
926 ;
927"RTN","XUSHSHP",4,0)
928HASH ; PEP: HASH; Fallthrough
929"RTN","XUSHSHP",5,0)
930 D X^UJOXCALL("HASH/DIGEST")
931"RTN","XUSHSHP",6,0)
932 Q
933"RTN","XUSHSHP",7,0)
934EN ; PEP: Encrypt
935"RTN","XUSHSHP",8,0)
936 D X^UJOXCALL("ENCRYPT STRING")
937"RTN","XUSHSHP",9,0)
938 Q
939"RTN","XUSHSHP",10,0)
940DE ; PEP: Decrypt
941"RTN","XUSHSHP",11,0)
942 D X^UJOXCALL("DECRYPT STRING")
943"RTN","XUSHSHP",12,0)
944 Q
945"SEC","^DIC",400000001.1,400000001.1,0,"AUDIT")
946@
947"SEC","^DIC",400000001.1,400000001.1,0,"DD")
948@
949"SEC","^DIC",400000001.1,400000001.1,0,"DEL")
950@
951"SEC","^DIC",400000001.1,400000001.1,0,"LAYGO")
952@
953"SEC","^DIC",400000001.1,400000001.1,0,"RD")
954
955"SEC","^DIC",400000001.1,400000001.1,0,"WR")
956@
957"SEC","^DIC",400000001.2,400000001.2,0,"AUDIT")
958@
959"SEC","^DIC",400000001.2,400000001.2,0,"DD")
960@
961"SEC","^DIC",400000001.2,400000001.2,0,"DEL")
962@
963"SEC","^DIC",400000001.2,400000001.2,0,"LAYGO")
964@
965"SEC","^DIC",400000001.2,400000001.2,0,"RD")
966
967"SEC","^DIC",400000001.2,400000001.2,0,"WR")
968@
969"SEC","^DIC",400000001.3,400000001.3,0,"AUDIT")
970@
971"SEC","^DIC",400000001.3,400000001.3,0,"DD")
972@
973"SEC","^DIC",400000001.3,400000001.3,0,"DEL")
974@
975"SEC","^DIC",400000001.3,400000001.3,0,"LAYGO")
976@
977"SEC","^DIC",400000001.3,400000001.3,0,"RD")
978
979"SEC","^DIC",400000001.3,400000001.3,0,"WR")
980@
981"VER")
9828.0^22.0
983"^DD",8925,8925,1503,0)
984SIGNATURE BLOCK NAME^FOX^^15;3^S X=$$ENCRYPT^TIULC1(X,1,$$CHKSUM^TIULC("^TIU(8925,"_+DA_",""TEXT"")")) K:$L(X)>120!($L(X)<3) X
985"^DD",8925,8925,1503,2)
986S Y(0)=Y S Y=$$DECRYPT^TIULC1(Y,1,$$CHKSUM^TIULC("^TIU(8925,"_$S(+$G(DA):+DA,+$G(D0):+D0,1:"")_",""TEXT"")"))
987"^DD",8925,8925,1503,2.1)
988S Y=$$DECRYPT^TIULC1(Y,1,$$CHKSUM^TIULC("^TIU(8925,"_$S(+$G(DA):+DA,+$G(D0):+D0,1:"")_",""TEXT"")"))
989"^DD",8925,8925,1503,3)
990Answer must be 3-30 characters in length.
991"^DD",8925,8925,1503,"DT")
9922980828
993"^DD",8925,8925,1504,0)
994SIGNATURE BLOCK TITLE^FOX^^15;4^S X=$$ENCRYPT^TIULC1(X,1,$$CHKSUM^TIULC("^TIU(8925,"_+DA_",""TEXT"")")) K:$L(X)>120!($L(X)<2) X
995"^DD",8925,8925,1504,2)
996S Y(0)=Y S Y=$$DECRYPT^TIULC1(Y,1,$$CHKSUM^TIULC("^TIU(8925,"_$S(+$G(DA):+DA,+$G(D0):+D0,1:"")_",""TEXT"")"))
997"^DD",8925,8925,1504,2.1)
998S Y=$$DECRYPT^TIULC1(Y,1,$$CHKSUM^TIULC("^TIU(8925,"_$S(+$G(DA):+DA,+$G(D0):+D0,1:"")_",""TEXT"")"))
999"^DD",8925,8925,1504,3)
1000Answer must be 2-60 characters in length.
1001"^DD",8925,8925,1504,21,0)
1002^^2^2^2940413^
1003"^DD",8925,8925,1504,21,1,0)
1004This is the encrypted signature block title of the person who signed the
1005"^DD",8925,8925,1504,21,2,0)
1006document.
1007"^DD",8925,8925,1504,"DT")
10082980828
1009"^DD",8925,8925,1509,0)
1010COSIGNATURE BLOCK NAME^FXO^^15;9^S X=$$ENCRYPT^TIULC1(X,1,$$CHKSUM^TIULC("^TIU(8925,"_+DA_",""TEXT"")")) K:$L(X)>120!($L(X)<2) X
1011"^DD",8925,8925,1509,2)
1012S Y(0)=Y S Y=$$DECRYPT^TIULC1(Y,1,$$CHKSUM^TIULC("^TIU(8925,"_$S(+$G(DA):+DA,+$G(D0):+D0,1:"")_",""TEXT"")"))
1013"^DD",8925,8925,1509,2.1)
1014S Y=$$DECRYPT^TIULC1(Y,1,$$CHKSUM^TIULC("^TIU(8925,"_$S(+$G(DA):+DA,+$G(D0):+D0,1:"")_",""TEXT"")"))
1015"^DD",8925,8925,1509,3)
1016This encrypted cosignature block will be automatically saved by the system.
1017"^DD",8925,8925,1509,"DT")
10182980828
1019"^DD",8925,8925,1510,0)
1020COSIGNATURE BLOCK TITLE^FXO^^15;10^S X=$$ENCRYPT^TIULC1(X,1,$$CHKSUM^TIULC("^TIU(8925,"_+DA_",""TEXT"")")) K:$L(X)>120!($L(X)<2) X
1021"^DD",8925,8925,1510,2)
1022S Y(0)=Y S Y=$$DECRYPT^TIULC1(Y,1,$$CHKSUM^TIULC("^TIU(8925,"_$S(+$G(DA):+DA,+$G(D0):+D0,1:"")_",""TEXT"")"))
1023"^DD",8925,8925,1510,2.1)
1024S Y=$$DECRYPT^TIULC1(Y,1,$$CHKSUM^TIULC("^TIU(8925,"_$S(+$G(DA):+DA,+$G(D0):+D0,1:"")_",""TEXT"")"))
1025"^DD",8925,8925,1510,3)
1026Answer must be 2-60 characters in length.
1027"^DD",8925,8925,1510,"DT")
10282980828
1029"^DD",400000001.1,400000001.1,0)
1030FIELD^^4^8
1031"^DD",400000001.1,400000001.1,0,"DT")
10323130226
1033"^DD",400000001.1,400000001.1,0,"IX","B",400000001.1,.01)
1034
1035"^DD",400000001.1,400000001.1,0,"NM","UJO SUPPORTED API")
1036
1037"^DD",400000001.1,400000001.1,.01,0)
1038NAME^RF^^0;1^K:$L(X)>30!($L(X)<3)!'(X'?1P.E) X
1039"^DD",400000001.1,400000001.1,.01,1,0)
1040^.1
1041"^DD",400000001.1,400000001.1,.01,1,1,0)
1042400000001.1^B
1043"^DD",400000001.1,400000001.1,.01,1,1,1)
1044S ^UJO(400000001.1,"B",$E(X,1,30),DA)=""
1045"^DD",400000001.1,400000001.1,.01,1,1,2)
1046K ^UJO(400000001.1,"B",$E(X,1,30),DA)
1047"^DD",400000001.1,400000001.1,.01,3)
1048Name must be 3-30 characters in length, not numeric or punctuation.
1049"^DD",400000001.1,400000001.1,.01,21,0)
1050^^1^1^3090112^
1051"^DD",400000001.1,400000001.1,.01,21,1,0)
1052This field records the supported API name.
1053"^DD",400000001.1,400000001.1,.01,"DT")
10543090112
1055"^DD",400000001.1,400000001.1,.02,0)
1056APPLICATION GROUP^P400000001.2^UJO(400000001.2,^0;2^Q
1057"^DD",400000001.1,400000001.1,.02,3)
1058Enter the primary class or group to which this API belongs.
1059"^DD",400000001.1,400000001.1,.02,21,0)
1060^^1^1^3090112^
1061"^DD",400000001.1,400000001.1,.02,21,1,0)
1062This field classifies the supported API into an application group.
1063"^DD",400000001.1,400000001.1,.02,"DT")
10643130226
1065"^DD",400000001.1,400000001.1,.03,0)
1066DATE CREATED^D^^0;3^S %DT="E" D ^%DT S X=Y K:Y<1 X
1067"^DD",400000001.1,400000001.1,.03,3)
1068
1069"^DD",400000001.1,400000001.1,.03,21,0)
1070^^1^1^3090112^
1071"^DD",400000001.1,400000001.1,.03,21,1,0)
1072This field records the date that this supported API was created.
1073"^DD",400000001.1,400000001.1,.03,"DT")
10743090112
1075"^DD",400000001.1,400000001.1,.04,0)
1076RESPONSIBLE PERSON^F^^0;4^K:$L(X)>45!($L(X)<3) X
1077"^DD",400000001.1,400000001.1,.04,3)
1078Enter the name of the person who maintains this API, 3-45 characters in length.
1079"^DD",400000001.1,400000001.1,.04,21,0)
1080^^2^2^3090112^
1081"^DD",400000001.1,400000001.1,.04,21,1,0)
1082This field records the developer or maintenance person, associated with
1083"^DD",400000001.1,400000001.1,.04,21,2,0)
1084this supported API.
1085"^DD",400000001.1,400000001.1,.04,"DT")
10863090112
1087"^DD",400000001.1,400000001.1,1,0)
1088SUPPORTED VARIABLE^400000001.11^^1;0
1089"^DD",400000001.1,400000001.1,2,0)
1090DEFAULT XECUTE^K^^2;E1,245^K:$L(X)>245 X D:$D(X) ^DIM
1091"^DD",400000001.1,400000001.1,2,3)
1092This is Standard MUMPS code, argument of XECUTE.
1093"^DD",400000001.1,400000001.1,2,9)
1094@
1095"^DD",400000001.1,400000001.1,2,21,0)
1096^^5^5^3090112^
1097"^DD",400000001.1,400000001.1,2,21,1,0)
1098This field may contain non implementation-specific M code, which will
1099"^DD",400000001.1,400000001.1,2,21,2,0)
1100be replaced by implementation-specific code, if defined.
1101"^DD",400000001.1,400000001.1,2,21,3,0)
1102If no implementation-specific entry exists, then the default code
1103"^DD",400000001.1,400000001.1,2,21,4,0)
1104will be executed. If neither implementation-specific nor default
1105"^DD",400000001.1,400000001.1,2,21,5,0)
1106XECUTE code exists, then standard in-line code will be executed.
1107"^DD",400000001.1,400000001.1,2,"DT")
11083090112
1109"^DD",400000001.1,400000001.1,3,0)
1110REMARKS^400000001.13^^3;0
1111"^DD",400000001.1,400000001.1,4,0)
1112SET VARIABLE^F^^4;1^K:$L(X)>80!($L(X)<1) X
1113"^DD",400000001.1,400000001.1,4,3)
1114Name of variable that the API must set, 1-80 characters in length.
1115"^DD",400000001.1,400000001.1,4,21,0)
1116^^7^7^3130226^
1117"^DD",400000001.1,400000001.1,4,21,1,0)
1118This field optionally identifies a variable. If this field
1119"^DD",400000001.1,400000001.1,4,21,2,0)
1120is valued, the supported API must set the named variable.
1121"^DD",400000001.1,400000001.1,4,21,3,0)
1122The value serves as the API's return, as if it were invoked
1123"^DD",400000001.1,400000001.1,4,21,4,0)
1124as an extrinsic function. Normally the variable will be
1125"^DD",400000001.1,400000001.1,4,21,5,0)
1126unsubscripted and namespaced, for example, UJOABC.
1127"^DD",400000001.1,400000001.1,4,21,6,0)
1128However, subscripts are also permitted, for example,
1129"^DD",400000001.1,400000001.1,4,21,7,0)
1130UJO($J,"ABC").
1131"^DD",400000001.1,400000001.1,4,"DT")
11323130226
1133"^DD",400000001.1,400000001.11,0)
1134SUPPORTED VARIABLE SUB-FIELD^^.03^3
1135"^DD",400000001.1,400000001.11,0,"IX","B",400000001.11,.01)
1136
1137"^DD",400000001.1,400000001.11,0,"NM","SUPPORTED VARIABLE")
1138
1139"^DD",400000001.1,400000001.11,0,"UP")
1140400000001.1
1141"^DD",400000001.1,400000001.11,.01,0)
1142SUPPORTED VARIABLE^MF^^0;1^K:$L(X)>8!($L(X)<1) X
1143"^DD",400000001.1,400000001.11,.01,1,0)
1144^.1
1145"^DD",400000001.1,400000001.11,.01,1,1,0)
1146400000001.11^B
1147"^DD",400000001.1,400000001.11,.01,1,1,1)
1148S ^UJO(400000001.1,DA(1),1,"B",$E(X,1,30),DA)=""
1149"^DD",400000001.1,400000001.11,.01,1,1,2)
1150K ^UJO(400000001.1,DA(1),1,"B",$E(X,1,30),DA)
1151"^DD",400000001.1,400000001.11,.01,3)
1152Answer must be 1-8 characters in length.
1153"^DD",400000001.1,400000001.11,.01,21,0)
1154^^2^2^3090112^
1155"^DD",400000001.1,400000001.11,.01,21,1,0)
1156This multiple field records variables that are available in the
1157"^DD",400000001.1,400000001.11,.01,21,2,0)
1158context of this supported API.
1159"^DD",400000001.1,400000001.11,.01,"DT")
11603090112
1161"^DD",400000001.1,400000001.11,.02,0)
1162ALWAYS DEFINED^S^0:NO;1:YES;^0;2^Q
1163"^DD",400000001.1,400000001.11,.02,3)
1164Indicate whether the variable is defined from every calling point.
1165"^DD",400000001.1,400000001.11,.02,21,0)
1166^^2^2^3090112^
1167"^DD",400000001.1,400000001.11,.02,21,1,0)
1168If this field is valued 'YES' references the the variable do not require
1169"^DD",400000001.1,400000001.11,.02,21,2,0)
1170$GET.
1171"^DD",400000001.1,400000001.11,.02,"DT")
11723090112
1173"^DD",400000001.1,400000001.11,.03,0)
1174BRIEF DESCRIPTION^F^^0;3^K:$L(X)>80!($L(X)<3) X
1175"^DD",400000001.1,400000001.11,.03,3)
1176Enter a description of the variable, 3-80 characters in length.
1177"^DD",400000001.1,400000001.11,.03,21,0)
1178^^1^1^3090112^
1179"^DD",400000001.1,400000001.11,.03,21,1,0)
1180This field briefly describes the supported variable.
1181"^DD",400000001.1,400000001.11,.03,"DT")
11823090112
1183"^DD",400000001.1,400000001.13,0)
1184REMARKS SUB-FIELD^^.01^1
1185"^DD",400000001.1,400000001.13,0,"NM","REMARKS")
1186
1187"^DD",400000001.1,400000001.13,0,"UP")
1188400000001.1
1189"^DD",400000001.1,400000001.13,.01,0)
1190REMARKS^Wx^^0;1^Q
1191"^DD",400000001.1,400000001.13,.01,3)
1192Describe any special considerations pertaining to this implementation-specific API.
1193"^DD",400000001.1,400000001.13,.01,21,0)
1194^^2^2^3090112^
1195"^DD",400000001.1,400000001.13,.01,21,1,0)
1196This field records notes or special considerations regarding the
1197"^DD",400000001.1,400000001.13,.01,21,2,0)
1198implementation-specific API.
1199"^DD",400000001.1,400000001.13,.01,"DT")
12003090112
1201"^DD",400000001.2,400000001.2,0)
1202FIELD^^.01^1
1203"^DD",400000001.2,400000001.2,0,"IX","B",400000001.2,.01)
1204
1205"^DD",400000001.2,400000001.2,0,"NM","UJO SUPPORTED API GROUP")
1206
1207"^DD",400000001.2,400000001.2,0,"PT",400000001.1,.02)
1208
1209"^DD",400000001.2,400000001.2,.01,0)
1210NAME^RF^^0;1^K:$L(X)>45!($L(X)<3)!'(X'?1P.E) X
1211"^DD",400000001.2,400000001.2,.01,1,0)
1212^.1
1213"^DD",400000001.2,400000001.2,.01,1,1,0)
1214400000001.2^B
1215"^DD",400000001.2,400000001.2,.01,1,1,1)
1216S ^UJO(400000001.2,"B",$E(X,1,30),DA)=""
1217"^DD",400000001.2,400000001.2,.01,1,1,2)
1218K ^UJO(400000001.2,"B",$E(X,1,30),DA)
1219"^DD",400000001.2,400000001.2,.01,3)
1220Enter class name, 3-45 characters in length.
1221"^DD",400000001.2,400000001.2,.01,21,0)
1222^^2^2^3090112^
1223"^DD",400000001.2,400000001.2,.01,21,1,0)
1224This field records a class or application group, to which
1225"^DD",400000001.2,400000001.2,.01,21,2,0)
1226one or more supported APIs belong.
1227"^DD",400000001.2,400000001.2,.01,"DT")
12283090112
1229"^DD",400000001.3,400000001.3,0)
1230FIELD^^9^4
1231"^DD",400000001.3,400000001.3,0,"IX","B",400000001.3,.01)
1232
1233"^DD",400000001.3,400000001.3,0,"IX","C",400000001.39,.01)
1234
1235"^DD",400000001.3,400000001.3,0,"NM","UJO IMPLEMENTATION-SPECIFIC API")
1236
1237"^DD",400000001.3,400000001.3,.01,0)
1238NAME^RP400000001.1'X^UJO(400000001.1,^0;1^S:$D(X) DINUM=X
1239"^DD",400000001.3,400000001.3,.01,1,0)
1240^.1
1241"^DD",400000001.3,400000001.3,.01,1,1,0)
1242400000001.3^B
1243"^DD",400000001.3,400000001.3,.01,1,1,1)
1244S ^UJO(400000001.3,"B",$E(X,1,30),DA)=""
1245"^DD",400000001.3,400000001.3,.01,1,1,2)
1246K ^UJO(400000001.3,"B",$E(X,1,30),DA)
1247"^DD",400000001.3,400000001.3,.01,3)
1248
1249"^DD",400000001.3,400000001.3,.01,"DT")
12503130226
1251"^DD",400000001.3,400000001.3,1,0)
1252XECUTE^K^^1;E1,245^K:$L(X)>245 X D:$D(X) ^DIM
1253"^DD",400000001.3,400000001.3,1,3)
1254This is Standard MUMPS code, argument of XECUTE.
1255"^DD",400000001.3,400000001.3,1,9)
1256@
1257"^DD",400000001.3,400000001.3,1,21,0)
1258^^2^2^3090112^
1259"^DD",400000001.3,400000001.3,1,21,1,0)
1260This is the implementation-specific version of the XECUTE code for
1261"^DD",400000001.3,400000001.3,1,21,2,0)
1262this supported API.
1263"^DD",400000001.3,400000001.3,1,"DT")
12643090112
1265"^DD",400000001.3,400000001.3,2,0)
1266NOTES^400000001.32^^2;0
1267"^DD",400000001.3,400000001.3,9,0)
1268SITE ID^400000001.39^^9;0
1269"^DD",400000001.3,400000001.32,0)
1270NOTES SUB-FIELD^^.01^1
1271"^DD",400000001.3,400000001.32,0,"NM","NOTES")
1272
1273"^DD",400000001.3,400000001.32,0,"UP")
1274400000001.3
1275"^DD",400000001.3,400000001.32,.01,0)
1276NOTES^Wx^^0;1^Q
1277"^DD",400000001.3,400000001.32,.01,21,0)
1278^^2^2^3090112^
1279"^DD",400000001.3,400000001.32,.01,21,1,0)
1280This field records any factors that need to be considered when
1281"^DD",400000001.3,400000001.32,.01,21,2,0)
1282using this implementation-specific API.
1283"^DD",400000001.3,400000001.32,.01,"DT")
12843090112
1285"^DD",400000001.3,400000001.39,0)
1286SITE ID SUB-FIELD^^.01^1
1287"^DD",400000001.3,400000001.39,0,"IX","B",400000001.39,.01)
1288
1289"^DD",400000001.3,400000001.39,0,"NM","SITE ID")
1290
1291"^DD",400000001.3,400000001.39,0,"UP")
1292400000001.3
1293"^DD",400000001.3,400000001.39,.01,0)
1294SITE ID^MF^^0;1^K:$L(X)>8!($L(X)<3) X
1295"^DD",400000001.3,400000001.39,.01,1,0)
1296^.1
1297"^DD",400000001.3,400000001.39,.01,1,1,0)
1298400000001.39^B
1299"^DD",400000001.3,400000001.39,.01,1,1,1)
1300S ^UJO(400000001.3,DA(1),9,"B",$E(X,1,30),DA)=""
1301"^DD",400000001.3,400000001.39,.01,1,1,2)
1302K ^UJO(400000001.3,DA(1),9,"B",$E(X,1,30),DA)
1303"^DD",400000001.3,400000001.39,.01,1,2,0)
1304400000001.3^C
1305"^DD",400000001.3,400000001.39,.01,1,2,1)
1306S ^UJO(400000001.3,"C",$E(X,1,30),DA(1),DA)=""
1307"^DD",400000001.3,400000001.39,.01,1,2,2)
1308K ^UJO(400000001.3,"C",$E(X,1,30),DA(1),DA)
1309"^DD",400000001.3,400000001.39,.01,1,2,"%D",0)
1310^^3^3^3090115^
1311"^DD",400000001.3,400000001.39,.01,1,2,"%D",1,0)
1312This index will be used primarily to select entries for transport
1313"^DD",400000001.3,400000001.39,.01,1,2,"%D",2,0)
1314through KIDS builds. However, it can also be used to "find" entries
1315"^DD",400000001.3,400000001.39,.01,1,2,"%D",3,0)
1316belonging to a particular site, through lookup.
1317"^DD",400000001.3,400000001.39,.01,1,2,"DT")
13183090115
1319"^DD",400000001.3,400000001.39,.01,3)
1320Enter site identifier as STATION NUMBER, 3-8 characters in length.
1321"^DD",400000001.3,400000001.39,.01,21,0)
1322^^3^3^3090115^
1323"^DD",400000001.3,400000001.39,.01,21,1,0)
1324This field value will be used when transporting file entries, to screen
1325"^DD",400000001.3,400000001.39,.01,21,2,0)
1326implementation-specific APIs by target site. Only entries that are
1327"^DD",400000001.3,400000001.39,.01,21,3,0)
1328relevant to a specific site will be sent as data.
1329"^DD",400000001.3,400000001.39,.01,"DT")
13303090115
1331"^DIC",400000001.1,400000001.1,0)
1332UJO SUPPORTED API^400000001.1
1333"^DIC",400000001.1,400000001.1,0,"GL")
1334^UJO(400000001.1,
1335"^DIC",400000001.1,400000001.1,"%",0)
1336^1.005^^
1337"^DIC",400000001.1,400000001.1,"%D",0)
1338^^6^6^3130226^
1339"^DIC",400000001.1,400000001.1,"%D",1,0)
1340Each entry in this file defines an API that can be called externally from
1341"^DIC",400000001.1,400000001.1,"%D",2,0)
1342the Mumps Database. Entries in UJO IMPLEMENTATION-SPECIFIC API file are
1343"^DIC",400000001.1,400000001.1,"%D",3,0)
1344DINUMMED to this file and override the default implementation of the API
1345"^DIC",400000001.1,400000001.1,"%D",4,0)
1346specified in this file if a DINUMMED entry is present in the other file.
1347"^DIC",400000001.1,400000001.1,"%D",5,0)
1348
1349"^DIC",400000001.1,400000001.1,"%D",6,0)
1350File design based on SIS ADT Filer files 29320.75*, with permission.
1351"^DIC",400000001.1,"B","UJO SUPPORTED API",400000001.1)
1352
1353"^DIC",400000001.2,400000001.2,0)
1354UJO SUPPORTED API GROUP^400000001.2
1355"^DIC",400000001.2,400000001.2,0,"GL")
1356^UJO(400000001.2,
1357"^DIC",400000001.2,400000001.2,"%",0)
1358^1.005^^
1359"^DIC",400000001.2,400000001.2,"%D",0)
1360^^4^4^3130226^
1361"^DIC",400000001.2,400000001.2,"%D",1,0)
1362This is a laygo file for the UJO SUPPORTED API file APPLICATION GROUP
1363"^DIC",400000001.2,400000001.2,"%D",2,0)
1364field. It's only used as a text field; not used elsewhere.
1365"^DIC",400000001.2,400000001.2,"%D",3,0)
1366
1367"^DIC",400000001.2,400000001.2,"%D",4,0)
1368File design based on SIS ADT Filer files 29320.75*, with permission.
1369"^DIC",400000001.2,"B","UJO SUPPORTED API GROUP",400000001.2)
1370
1371"^DIC",400000001.3,400000001.3,0)
1372UJO IMPLEMENTATION-SPECIFIC API^400000001.3
1373"^DIC",400000001.3,400000001.3,0,"GL")
1374^UJO(400000001.3,
1375"^DIC",400000001.3,400000001.3,"%",0)
1376^1.005^^
1377"^DIC",400000001.3,400000001.3,"%D",0)
1378^^6^6^3130226^
1379"^DIC",400000001.3,400000001.3,"%D",1,0)
1380This file stores platform specific implementations of algorithms specified
1381"^DIC",400000001.3,400000001.3,"%D",2,0)
1382in UJO SUPPORTED API file. Any algorithm specified in this file overrides
1383"^DIC",400000001.3,400000001.3,"%D",3,0)
1384the default algorithm specified in UJO SUPPORTED API file.
1385"^DIC",400000001.3,400000001.3,"%D",4,0)
1386
1387"^DIC",400000001.3,400000001.3,"%D",5,0)
1388This file's design is based on SIS ADT Filer files 29320.75*, with
1389"^DIC",400000001.3,400000001.3,"%D",6,0)
1390permission.
1391"^DIC",400000001.3,"B","UJO IMPLEMENTATION-SPECIFIC AP",400000001.3)
1392
1393**END**
1394**END**