@@ -27,6 +27,11 @@ type loadPBAImageCmd struct {
27
27
Path string `flag:"" required:"" short:"i" help:"Path to PBA image"`
28
28
}
29
29
30
+ type revertTPerCmd struct {
31
+ Device string `flag:"" required:"" short:"d" help:"Path to SED device (e.g. /dev/nvme0)"`
32
+ Password string `flag:"" required:"" short:"p"`
33
+ }
34
+
30
35
type revertNoeraseCmd struct {
31
36
Device string `flag:"" required:"" short:"d" help:"Path to SED device (e.g. /dev/nvme0)"`
32
37
Password string `flag:"" required:"" short:"p"`
@@ -37,6 +42,7 @@ var cli struct {
37
42
InitialSetup initialSetupCmd `cmd:"" help:"Take ownership of a given device"`
38
43
LoadPBA loadPBAImageCmd `cmd:"" help:"Load PBA image to shadow MBR"`
39
44
RevertNoerase revertNoeraseCmd `cmd:"" help:""`
45
+ RevertTper revertTPerCmd `cmd:"" help:""`
40
46
}
41
47
42
48
// Run executes when the initial-setup command is invoked
@@ -227,3 +233,37 @@ func (r *revertNoeraseCmd) Run(ctx *context) error {
227
233
}
228
234
return nil
229
235
}
236
+
237
+ func (r * revertTPerCmd ) Run (ctx * context ) error {
238
+ coreObj , err := core .NewCore (r .Device )
239
+ if err != nil {
240
+ return fmt .Errorf ("NewCore(%s) failed: %v" , r .Device , err )
241
+ }
242
+ comID , _ , err := core .FindComID (coreObj .DriveIntf , coreObj .DiskInfo .Level0Discovery )
243
+ if err != nil {
244
+ return fmt .Errorf ("FindComID() failed: %v" , err )
245
+ }
246
+ cs , err := core .NewControlSession (coreObj .DriveIntf , coreObj .Level0Discovery , core .WithComID (comID ))
247
+ if err != nil {
248
+ return fmt .Errorf ("NewControllSession() failed: %v" , err )
249
+ }
250
+ adminSession , err := cs .NewSession (uid .AdminSP )
251
+ if err != nil {
252
+ return fmt .Errorf ("cs.NewSession() failed: %v" , err )
253
+ }
254
+ serial , err := coreObj .SerialNumber ()
255
+ if err != nil {
256
+ return fmt .Errorf ("coreObj.SerialNumber() failed: %v" , err )
257
+ }
258
+ salt := fmt .Sprintf ("%-20s" , serial )
259
+ pwhash := pbkdf2 .Key ([]byte (r .Password ), []byte (salt [:20 ]), 75000 , 32 , sha1 .New )
260
+
261
+ if err := table .ThisSP_Authenticate (adminSession , uid .AuthoritySID , pwhash ); err != nil {
262
+ return fmt .Errorf ("authenticating as AdminSP failed: %v" , err )
263
+ }
264
+
265
+ if err := table .RevertTPer (adminSession ); err != nil {
266
+ return fmt .Errorf ("RevertTPer() failed: %v" , err )
267
+ }
268
+ return nil
269
+ }
0 commit comments